Heim  >  Artikel  >  Backend-Entwicklung  >  Erklären Sie, wie Generika in C# funktionieren

Erklären Sie, wie Generika in C# funktionieren

WBOY
WBOYnach vorne
2023-08-27 23:45:021033Durchsuche

解释泛型在 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>
{

}

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>();

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 &#39;string&#39; to &#39;int&#39; [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-Typ implementiert die generische IEnumerable-Schnittstelle sowie andere Schnittstellen.

public class LinkedList<T> : IEnumerable<T>

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;
   }
}

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 -

  • 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 li>
  • 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;
   }
}

Output

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen