1. Čo je generické?
Generiky sú nová syntax zavedená v C# 2.0, nie syntax sugar, ale funkcie poskytované rozšíreniami frameworku vo verzii 2.0.
Keď programujeme programy, často sa stretávame s modulmi s veľmi podobnými funkciami, ale spracovávajú rôzne dáta. Ale nemáme inú možnosť, než napísať viacero metód samostatne na spracovanie rôznych dátových typov. V tejto chvíli je otázka, či existuje spôsob, ako použiť tú istú metódu na riešenie rôznych typov parametrov? Vznik generík je špeciálne navrhnutý na riešenie tohto problému.
2. Prečo používať generiká
Pozrime sa na nasledujúci príklad:
Výsledok:
Z vyššie uvedených výsledkov vidíme, že tieto tri metódy majú rovnaké funkcie okrem rozdielnych parametrov, ktoré prechádzajú. V čase verzie 1.0 neexistoval koncept generík, tak čo robiť. Verím, že mnohí ľudia si budú myslieť na dedičstvo jednej z troch hlavných vlastností OOP, vieme, že v C# je objekt základnou triedou všetkých typov a vyššie uvedený kód je optimalizovaný nasledovne:
Výsledok:
Z vyššie uvedených výsledkov vidíme, že použitie typu objektu spĺňa naše požiadavky a rieši znovupoužiteľnosť kódu. Niektorí ľudia sa môžu pýtať, prečo je možné odovzdať int, reťazec a podobne, keď je definovaný ako typ objektu? Existujú dva dôvody:
1. Typ objektu je rodičovská trieda všetkých typov.
2. Prostredníctvom dedičnosti majú podtriedy všetky atribúty a správanie rodičovskej triedy a kdekoľvek sa rodičovská trieda objaví, môže byť nahradená podtriedami.
Vyššie uvedená metóda typu objektu však prináša ďalší problém: boxovanie a rozbaľovanie môžu znížiť výkon programu.
Microsoft zaviedol generiká v C# 2.0, ktoré dokážu veľmi dobre vyriešiť vyššie uvedené problémy.
3. Všeobecné typové parametre
V definícii generického typu alebo metódy je parameter typu zástupný parameter určený klientom pre konkrétny typ, keď inštancifikuje premennú tohto typu. Generická trieda (GenericList<T>) nemôže byť použitá tak, ako je, pretože nie je pravým typom; Je to skôr plán pre typy. Na použitie GenericList <T>musí klientský kód deklarovať a inštancovať typ konštruktu špecifikovaním parametra typu v zátvorkách. Typový argument pre túto konkrétnu triedu môže byť akýkoľvek typ, ktorý kompilátor rozpozná. Môžete vytvoriť ľubovoľný počet inštancií typov konštruktov, pričom každá má iný typový parametr.
Kód v uvedenom príklade je možné upraviť nasledovne:
Výzva:
Zobraziť výsledky:
|