Erklären Sie, wie Generika in C# funktionieren

WBOY
Freigeben: 2023-08-27 23:45:02
nach vorne
1032 Leute haben es durchsucht

解释泛型在 C# 中的工作原理

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.

Generische Typen

Die Syntax zum Deklarieren eines generischen Typs besteht aus Typparametern, die in spitzen Klammern eingeschlossen sind. Der Name des Typs. Beispielsweise ist Locator die generische Klasse im folgenden Beispiel.

public class Locator<T>
{

}
Nach dem Login kopieren

Um eine Instanz von Locator zu erstellen, verwenden Sie das Schlüsselwort new gefolgt vom Namen der Klasse. Sie können jedoch anstelle von T den tatsächlichen Typ angeben, der als Parameter übergeben werden soll. Das folgende Beispiel übergibt einen Zeichenfolgentyp als Parameter.

var stringLocator = new Locator<string>();
Nach dem Login kopieren

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);
Nach dem Login kopieren

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 &#39;string&#39; to &#39;int&#39; [c-sharp]csharp(CS0029)
int item = stringLocator.Locate(2);
Nach dem Login kopieren

beispielsweise von einem generischen Basistyp oder einer generischen Schnittstelle erbt, kann der generische Typ Typparameter als Typargumente verwenden. Der generische LinkedList-Typ implementiert die generische IEnumerable-Schnittstelle sowie andere Schnittstellen.

public class LinkedList<T> : IEnumerable<T>
Nach dem Login kopieren

Generische Methoden

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 eine generische Methode, die zwei Parameter vom Typ T akzeptiert und eine Instanz von T zurückgibt.

public class Swapper{
   public T Swap<T>(T first, T second){
      T temp = first;
      first = second;
      second = temp;
      return temp;
   }
}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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>
Nach dem Login kopieren

Abschließend ist es wichtig zu verstehen, was universell ist. Bei Typen kann alles außer Aufzählungen generisch sein. Dazu gehören -

  • Klassen
  • Strukturen
  • Schnittstellen
  • Delegierte

Für Typmitglieder können nur Methoden und verschachtelte Typen generisch sein. Die folgenden Mitglieder können nicht generisch sein:

  • Fields
  • Properties
  • Indexer
  • Constructor
  • Events
  • Terminator

Example

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;
   }
}
Nach dem Login kopieren

Output

CSharp
a = 3, b = 5
Nach dem Login kopieren

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!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage