1. Was ist generisch?
Generics sind neue Syntax, die in C# 2.0 eingeführt wurde, nicht Syntax-Zucker, sondern Funktionen, die durch Framework-Upgrades in 2.0 bereitgestellt werden.
Wenn wir Programme programmieren, stoßen wir oft auf Module mit sehr ähnlichen Funktionen, aber sie verarbeiten unterschiedliche Daten. Aber wir haben keine andere Wahl, als mehrere Methoden separat zu schreiben, um unterschiedliche Datentypen zu verarbeiten. Im Moment stellt sich die Frage, ob es eine Möglichkeit gibt, dieselbe Methode zu verwenden, um mit verschiedenen Arten von Parametern umzugehen. Das Aufkommen von Generika ist speziell darauf ausgelegt, dieses Problem zu lösen.
2. Warum Generika verwenden
Schauen wir uns folgendes Beispiel an:
Ergebnis:
Aus den obigen Ergebnissen sehen wir, dass diese drei Methoden dieselben Funktionen haben, abgesehen von den unterschiedlichen Parametern, die sie passieren. Zur Zeit von Version 1.0 gab es kein Konzept von Generika, also was sollte man tun? Ich glaube, viele Menschen denken an die Vererbung eines der drei Hauptmerkmale von OOP; wir wissen, dass in C# das Objekt die Basisklasse aller Typen ist und der obige Code wie folgt optimiert ist:
Ergebnis:
Aus den obigen Ergebnissen sehen wir, dass die Verwendung des Objekttyps unsere Anforderungen erfüllt und die Wiederverwendbarkeit des Codes löst. Manche Leute fragen vielleicht, warum es möglich ist, int, String usw. weiterzugeben, obwohl es als Objekttyp definiert ist? Es gibt zwei Gründe:
1. Der Objekttyp ist die Elternklasse aller Typen.
2. Durch Vererbung besitzen Unterklassen alle Attribute und Verhaltensweisen der Elternklasse, und wo immer die Elternklasse erscheint, kann sie durch Unterklassen ersetzt werden.
Doch die oben genannte Objekttyp-Methode bringt ein weiteres Problem mit sich: Boxen und Unboxing können die Leistung des Programms verringern.
Microsoft hat Generika in C# 2.0 eingeführt, die die oben genannten Probleme sehr gut lösen können.
3. Generische Typparameter
In einer generischen Typ- oder Methodendefinition ist ein Typparameter ein vom Client für einen bestimmten Typ festgelegter Platzhalter, wenn er eine Variable des generischen Typs instanziiert. Die generische Klasse (GenericList<T>) kann nicht so verwendet werden, da sie kein echter Typ ist; Es ist eher wie ein Bauplan für Typen. Um GenericList zu verwenden<T>, muss der Client-Code einen Konstrukttyp deklarieren und instanziieren, indem der Typparameter innerhalb von Winkelklammern angegeben wird. Das Typargument für diese spezielle Klasse kann jeder Typ sein, den der Compiler erkennt. Man kann beliebig viele Konstrukttyp-Instanzen erstellen, jede mit einem anderen Typparameter.
Der Code im obigen Beispiel kann wie folgt modifiziert werden:
Rufen:
Showergebnisse:
|