Referenční typy - třída
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ů