Základ C# 19 – Rozširovanie tried [Class extending]

Rozširovanie tried je užitočná vlastnosť pridať nové metódy do tried, bez toho aby ste ovplyvňovali ich kód.

Pri rozširovaní tried vytvárate nové triedy obsahujúce metódy, ktoré budú priradené iným triedam. Tie je potom možné použiť ako keby to boli normálne funkcie v rozšírenej triede.

Ako napísať rozširujúcu triedu

Napísanie rozširujúcej triedy je jednoduché – stačí vytvoriť klasickú statickú triedu. Nie je nutné špecifikovať ktorú triedu budete rozširovať ani použiť žiadne špeciálne modifikátory, to si jazyk zariadi sám. Jedna rozširujúca trieda môže obsahovať metódy rozširujúce viacero rôznych tried, čiže si môžete vytvoriť triedu, v ktorej budete mať všetky vaše rozšírenia. Okrem toho táto trieda môže obsahovať aj klasické metódy a premenné, ktorými budete môcť ovplyvniť správanie sa rozširujúcich metód.

public static class Extensions
{
}

Toto by mohla byť základná trieda, do ktorej budete pridávať všetky rozširujúce metódy.

Ako napísať rozširujúcu metódu

Napísanie rozširujúcej metódy je už trochu odlišné od klasickej metódy – musíte definovať akú triedu bude rozširovať. Opäť nieje nutné používať žiadne modifikátory, táto metóda však musí byť statická, aby mohla byť kedykoľvek zavolaná bez potreby tvorby nového objektu.

public static int WordCount(this string original)
{
   return original.Split(new char[] { ' ', '.', ',', '?', '!', ';' }, StringSplitOptions.RemoveEmptyEntries).Length;
}

Táto rozširujúca metóda rozširuje triedu string o metódu WordCount. Ktorá trieda bude rozširovaná je zadané parametrom s modifikátorom this. Parameter označujúci rozširovanú triedu by mal byť vždy prvý, následne je možné zadať ľubovoľné množstvo parametrov. Teraz si trochu rozoberme ako táto metóda funguje. Pre vás, ktorý z jazykom C# ešte nemáte veľa skúseností môže byť neznáma metóda Split, ktorá sa nachádza v triede string. Táto metóda je schopná rozdeliť string do poľa podľa daných kritérií. V našom príklade sme funkcií ako parameter zadali pole typu char obsahujúce znaky – medzera, bodka, čiarka, otáznik, výkričník a bodkočiarka. Kdekoľvek v texte stringu sa bude jeden z týchto znakov nachádzať, bude rozdelený. Ďalej sme použili parameter, ktorý metóde Split hovorí, že má odstrániť prázdne stringi vo výslednom poli. Ak by teda vstupom bol string „Hello, World!“, tak by bol rozdelený na string[]{„Hello“, „World“}. Keby sme však nešpecifikovali, že majú byť odstránené prázdne vstupy, vzniklo by niečo ako string[]{„Hello“, „“, „World“, „“}. To by bolo spôsobené práve čiarkou a výkričníkom, pri ktorých by bol string rozdelený, Po použitý metódy Split sme pomocou člena Length zistili dĺžku výsledného poľa a tú odoslali ako výsledok metódy.

Ako použiť a ako naozaj funguje rozširujúca metóda

Týmto je rozširujúca metóda plne pripravená na použitie. Keďže metóda je použiteľná ako by bola členom rozširovanej triedy, môžeme si jej využitie ukázať na nasledujúcom príklade.

string hello = "Hello, World!";
Console.WriteLine(hello.WordCount());

V príklade sme vytvorili objekt typu string obsahujúci text „Hello, World!“ a pomocou metódy WordCount(), ktorá sa javí byť súčasťou triedy string zistili počet slov a metódou WriteLine ho napísali na obrazovku. Takto sme použili našu rozširujúcu metódu, ako to celé vníma kompilátor?
Ten vidí, že chceme použiť rozširujúcu metódu a tak kód nahradí a použije ako klasickú statickú metódu z funkcie Extensions.

string hello = "Hello, World!";
Console.WriteLine(Extensions.WordCount(hello));

Vidíte, že v prvom príklade je celý proces inštinktívnejší a jednoduchší. Rozširujúce metódy teda naozaj dokážu spraviť kód čitateľnejším a uhladenejším, avšak neponúkajú plnú silu metód, ktoré sa naozaj nachádzajú v pôvodnej triede.

 Týmto sme prešli jedno z zaujímavejších odvetví jazyka C# a tak sa nabudúce pozrieme na delegáti a udalosti.

Poznámka : Príklad metódy WordCount bol prevzatý z webu msdn.

Pridajte Komentár

Vaša e-mailová adresa nebude zverejnená.

Scroll to Top