8. Dekonstrukce instance

Konstruktor jsme použili pro vytvoření instance třídy a inicializaci datových složek, které instance obsahuje. Dekonstrukce nám umožní prozkoumat instanci a extrahovat hodnoty z jejích datových složek. Obecná syntaxe pro dekonstrukci je následující:

modifikátorPřístupu void Deconstruct (výstupníParametry) 
{
	těloDekonstrukce
}

kde:

  • modifikátorPřístupu - je stejný jako metod a datových složek

  • void - klíčové slovo říkající, že metoda nemá žádný výstup

  • Deconstruct - povinný název metody pro dekonstrukci instance

  • výstupníParametry  - musí existovat minimálně jeden výstupní parametr. výstupníParametry musí být uvozeny klíčovým slovem out, tzn., že hodnoty jim budou přiřazeny teprve v metodě – viz kapitola Výstupní parametry. Všem výstupním parametrům musí být přiřazena hodnota

  • těloDekonstrukce - je uzavřeno do složených závorek

Pro ilustraci uveďme jednoduchý příklad metody dekonstrukce instance bodu na ploše.


Ilustrativní příklad DekonstrukceInstance
Program DekonstrukceInstance
  • Popis: Dekonstrukce objektu třídy
  • Zadání: Vytvořte instanci bodu na ploše bodNaPlose třídy Bod pomocí vlastního konstruktoru. Instance je definována pomocí dvou reálných souřadnic x a y (soukromé datové složky). V hlavní metodě Main konstruktoru předejte x = 5 a y = 7. Dekonstruujte instanci a vypište v Main hodnotu jejích datových složek 
  • Řešení: Bude postupně probráno v následujícím textu


Třídu jsme nazvali Bod. Každá instance (každý bod) je definována pomocí dvou souřadnic: x,y. Tyto reálné hodnoty souřadnic x-ové a y-ové souřadnice bodu uložíme do soukromých datových složek – viz Kód 1. 

//Deklarace třídy pro generování bodu na ploše
class Bod
{
    //Deklarace soukromých datových složek - souřadnice bodu
    double x, y;
}

Kód 1: Deklarace třídy Bod a deklarace soukromých datových složek třídy

Pro třídu bod jsme deklarovali konstruktor, který přijímá jako formální parametry x-ové a y-ové souřadnice bodu. Pomocí těchto hodnot provedeme inicializaci datových složek instance – viz Kód 2.

//Deklarace konstruktoru třídy
public Bod(double x, double y) 
{
    //Incializace datových složek pomocí hodnoty parametrů
    this.x = x;
    this.y = y;
}

Kód 2: Deklarace vlastního konstruktoru třídy Bod

V následujícím kódu je zobrazena metoda dekonstrukce instance třídy Bod. Jedná se o extrahování hodnot uložených v jednotlivých datových složkách instance. Tyto hodnoty jsou v těle metody přiřazeny do výstupních parametrů metody – viz Kód 3.

//Metoda dekonstrukce instance třídy - extrahování datových složek
public void Deconstruct(out double x, out double y)
{
    //Přiřazení hodnoty datové složky do výstupního parametru
    x = this.x;
    y = this.y;
}

Kód 3: Deklarace dekonstruktoru třídy Bod

Zkusme si nyní ve statické metodě Main pomocí konstruktoru vygenerovat bod na ploše o reálných souřadnicích. Nejprve v metodě Main deklarujeme lokální proměnné x a y stejného datového typu jako datové složky třídy. Instanci třídy Bod pojmenujeme bodNaPlose. Tuto instanci vytvoříme pomocí deklarovaného konstruktoru. V dalším kroku použijeme metodu dekonstrukce instance, pomocí níž získáme hodnoty souřadnic bodu, které uložíme do lokálních proměnných x a y. Tyto hodnoty následně vypíšeme – viz Kód 4.

static void Main(string[] args)
{
    //Deklarace reálných proměnných
    double x, y;
    //Zavolání konstruktoru a předání parametrů
    Bod bodNaPlose = new Bod(5, 7);
    //Metoda dekonstrukce instance
    bodNaPlose.Deconstruct(out x, out y);
    Console.WriteLine("Bod na ploše - dekonstrukce:");
    //Výpis hodnot získaných z datových složek instance
    Console.WriteLine("Hodnota x: {0}", x);
    Console.WriteLine("Hodnota y: {0}", y);
    //Čekání na stisk klávesy -> ukončení programu
    Console.ReadKey();
}

Kód 4: Hlavní metoda Main - generování instance bodNaPlose třídy Bod a zavolání dekonstrukce objektu

Na výpisu v konzoli vidíme, že byly vypsány hodnoty datových složek instance bodNaPlose zkopírované do lokálních proměnných – viz Výstup programu - Kód 4. 

Bod na ploše - dekonstrukce:
Hodnota x: 5
Hodnota y: 7

Výstup programu - Kód 4: Výpis hodnot lokálních proměnných obsahující hodnoty datových složek


K dekonstrukci instance lze také využít již nám známý postup návratu více výstupů – viz kapitola Návrat více výstupů. V kódu vidíme, že vpravo od operátoru přiřazení je umístěna instance dané třídy. Vlevo jsou umístěny lokální proměnné, do nichž bude uložena hodnota. C# totiž sám na pozadí spustil dekonstruktor (tato metoda musí být deklarována, jinak metoda s více výstupy nebude fungovat) a naplnil hodnoty do proměnných. Proměnné jsme na začátku před použitím dekonstrukce instance ještě vynulovali, abychom si byli jisti, že metoda návratu více výstupů funguje – viz Kód 5.

//Volání metody pro návrat více výstupů
(x, y) = bodNaPlose;
//Výpis hodnot získaných z datových složek instance
Console.WriteLine("Bod na ploše - více výstupů:");
Console.WriteLine("Hodnota x: {0}", x);
Console.WriteLine("Hodnota y: {0}", y);

Kód 5: Příklad volání metody pro návrat více výstupů