Základ C# 18 – Vlastné konverzie tried [Custom class conversions]

Pri základných triedach ako int, float a podobných môžete ľahko priradiť jeden typ k inému – napríklad hodnotu int k premennej typu float. Dnes si ukážeme ako niečo podobné dosiahnuť pri vlastných triedach.

Systém konverzie jedného typu na iný je pomerne jednoduchá a priamočiara činnosť. V skutočnosti totiž nejde o konverziu ale o vytvorenie nového objektu na základe nejakých zadaných údajov alebo vrátenie objektu na základe aktuálneho stavu.

Implicitná konverzia

Implicitná konverzia je konverzia zabezpečujúca konverziu smerom k vašej triede, čiže konverzujete nejakú premennú na objekt vašej triedy. Prebieha to tvorbou akejsi metódy, ktorá je podobná nahradeniu operátora. Vytvoríte si ju napísaním statickej metódy s menom zhodným s vašou triedou a parametrom vstupného typu.

static public implicit operator Vektor(float value)
{
   return new Vektor(value, value);
}

Pri definícií metódy vidíte slovo implicit, ktoré práve označuje implicitnú konverziu, ktorá má parameter typu float. ako vrátili sme nový objekt typu Vektor. Následne môžete použiť  Vektor novy_vektor = 4.5f; čím sa spustí metóda na implicitnú konverziu z typu float na typ Vektor.

Explicitná konverzia

Explicitná konverzia je podobná implicitnej, pričom namiesto slova implicit napíšete explicit, meno metódy bude výstupný typ konverzie a parameter bude typu vašej triedy.

static public explicit operator float(Vektor value)
{
   return (value.X * value.Y);
}

Pri explicitnej konverzií naopak zameníme našu triedu na iný typ a následne môžete použiť nasledujúci kód.

Vektor vektor = new Vektor(3, 8);
float cislo = (float)vektor;

Tým sa spustí metóda na explicitnú konverziu a vráti typ float, ALE musí byť použité pretypovanie.

Pomaly sa blížime ku konci tejto série základov C# a tak sa dostávame k pokročilejším témam a tak sa nabudúce pozrieme na rozšírenia tried, čo je veľmi užitočná funkcia tohto jazyka dovoľujúca rozširovanie iných tried bez zásahu do ich kódu.

Pridajte Komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *


The reCAPTCHA verification period has expired. Please reload the page.

Návrat hore