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.