Generika wurden in C# Version 2.0 hinzugefügt und sind eines der wichtigsten Konzepte in der Sprache. Sie ermöglichen es Ihnen, wiederverwendbaren, leistungsstarken Code zu schreiben, der zur Kompilierungszeit typsicher ist. Mit Generika können Sie einen Typ in Ihrem Code verwenden, ohne den Typ vorher zu kennen.
Generika werden an vielen Stellen in .NET verwendet, einschließlich Sammlungen, Delegaten und asynchronem Code. Bei generischen Elementen müssen Sie die Größe der Sammlung nicht im Voraus kennen und können generische Elemente mit jedem Elementtyp verwenden, sogar mit benutzerdefinierten Datentypen, die speziell für Ihren Code gelten. C# bietet Unterstützung für generische Typen (Klassen, Schnittstellen usw.) und generische Methoden.
In Generics gibt es Typparameter und Typparameter. Dies ähnelt einer Methode, die über Parameter verfügt, die Sie an die Methode übergeben können.
Die Syntax zum Deklarieren eines generischen Typs besteht aus Typparametern, die in spitzen Klammern eingeschlossen sind. Der Name des Typs. Beispielsweise ist Locator
public class Locator<T> { }
Um eine Instanz von Locator zu erstellen
var stringLocator = new Locator<string>();
Sie können Typparameter (T) für Klassenmethoden verwenden, wie im folgenden Beispiel gezeigt.
public class Locator{ public IList Items { get; set; } public T Locate(int index){ return Items[index]; } } var stringLocator = new Locator<string>(); string item = stringLocator.Locate(2);
Ein weiterer Vorteil von Generika ist der vom Editor bereitgestellte IntelliSense. Wenn Sie stringLocator.Locate(4) in Visual Studio oder VS Code eingeben und mit der Maus über den Methodennamen fahren, wird angezeigt, dass eine Zeichenfolge anstelle eines T zurückgegeben wird. Der Compiler gibt einen Fehler aus, wenn Sie versuchen, das Ergebnis einem anderen Typ als einem String zuzuweisen. Wenn
// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);
beispielsweise von einem generischen Basistyp oder einer generischen Schnittstelle erbt, kann der generische Typ Typparameter als Typargumente verwenden. Der generische LinkedList
public class LinkedList<T> : IEnumerable<T>
Eine generische Methode ist einfach eine Methode, die einen Typparameter deklariert, den Sie innerhalb einer Methode verwenden und als Parameter und Rückgabetyp verwenden können. Im folgenden Beispiel ist Swap
public class Swapper{ public T Swap<T>(T first, T second){ T temp = first; first = second; second = temp; return temp; } }
Wenn Sie eine generische Methode aufrufen, gibt sie wie generische Typen eine stark typisierte Variable zurück.
var swapper = new Swapper(); int result = swapper.Swap<int>(5, 3);
kann mehrere allgemeine Parameter haben. Die Dictionary-Klasse im System.Collections.Generic-Namespace verfügt über zwei Typparameter: Schlüssel und Wert.
public class Dictionary<TKey, TValue>
Abschließend ist es wichtig zu verstehen, was universell ist. Bei Typen kann alles außer Aufzählungen generisch sein. Dazu gehören -
Für Typmitglieder können nur Methoden und verschachtelte Typen generisch sein. Die folgenden Mitglieder können nicht generisch sein:
Live Demo
using System; using System.Collections.Generic; class Program{ static void Main(){ var stringLocator = new Locator<string>(){ Items = new string[] { "JavaScript", "CSharp", "Golang" } }; string item = stringLocator.Locate(1); Console.WriteLine(item); // CSharp var swapper = new Swapper(); int a = 5, b = 3; int result = swapper.Swap<int>(ref a, ref b); Console.WriteLine($"a = {a}, b = {b}"); } } public class Locator<T>{ public IList<T> Items { get; set; } public T Locate(int index){ return Items[index]; } } public class Swapper{ public T Swap<T>(ref T first, ref T second){ T temp = first; first = second; second = temp; return temp; } }
CSharp a = 3, b = 5
Das obige ist der detaillierte Inhalt vonErklären Sie, wie Generika in C# funktionieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!