1. Co je obecné?
Generické jsou nová syntax zavedená v C# 2.0, ne syntax sugar, ale funkce poskytované vylepšeními frameworku ve verzi 2.0.
Když programujeme programy, často narazíme na moduly s velmi podobnými funkcemi, ale zpracovávají odlišná data. Ale nemáme jinou možnost než napsat více metod samostatně, abychom zvládli různé datové typy. V tuto chvíli je otázka, zda existuje způsob, jak použít stejnou metodu pro různé typy parametrů? Vznik generik je speciálně navržen k řešení tohoto problému.
2. Proč používat generika
Podívejme se na následující příklad:
Výsledek:
Z výše uvedených výsledků vidíme, že tyto tři metody mají stejné funkce kromě různých parametrů, které přecházejí. V době verze 1.0 ještě neexistoval koncept generik, tak co dělat. Věřím, že mnoho lidí si vzpomene na dědičnost jedné ze tří hlavních vlastností OOP, víme, že v C# je objekt základní třídou všech typů a výše uvedený kód je optimalizován následovně:
Výsledek:
Z výše uvedených výsledků vidíme, že použití typu Object splňuje naše požadavky a řeší znovupoužitelnost kódu. Někteří lidé se mohou ptát, proč je možné předávat int, řetězec atd., když je definován jako typ objektu? Existují dva důvody:
1. Typ objektu je třídou rodičů všech typů.
2. Díky dědičnosti mají podtřídy všechny atributy a chování rodičovské třídy a kdekoliv se rodičovská třída objeví, může být nahrazena podtřídami.
Ale výše uvedená metoda typu objektu přináší další problém: boxování a rozbalování mohou snížit výkon programu.
Microsoft představil generické generika v C# 2.0, které mohou tyto problémy velmi dobře vyřešit.
3. Obecné typové parametry
V definici obecného typu nebo metody je parametr typu zástupný parametr určený klientem pro konkrétní typ, když instancuje proměnnou tohoto generického typu. Generická třída (GenericList<T>) nemůže být použita tak, jak je, protože není pravdivým typem; Je to spíš plán pro typy. Pro použití GenericList <T>musí klientský kód deklarovat a instancovat typ konstruktu tím, že parametr typu zadá v úhlových závorkách. Typový argument pro tuto konkrétní třídu může být jakýkoli typ, který kompilátor rozpozná. Můžete vytvořit libovolný počet instancí typu konstruktů, z nichž každá má jiný typ parametr.
Kód v uvedeném příkladu lze upravit následovně:
Výzva:
Zobrazit výsledky:
|