Generische Schnittstellen in .NET
Dieser Artikel bietet einen Überblick über generische Schnittstellen von .NET, die allgemeine Funktionen für Familien generischer Typen bereitstellen.
Generische Schnittstellen bieten typsichere Entsprechungen zu nicht generischen Schnittstellen für Reihenfolgen- und Übereinstimmungsvergleiche sowie für Funktionen, die von generischen Auflistungstypen gemeinsam verwendet werden. In .NET 7 werden generische Schnittstellen für zahlenähnliche Typen eingeführt, z. B. System.Numerics.INumber<TSelf>. Mit diesen Schnittstellen können Sie generische Methoden definieren, die mathematische Funktionalität bereitstellen, wobei der Parameter des generischen Typs zwingend ein Typ sein muss, der eine generische numerische Schnittstelle implementiert.
Hinweis
Die Typparameter mehrerer generischer Schnittstellen sind als kovariant oder kontravariant gekennzeichnet. Dies bietet mehr Flexibilität beim Zuweisen und Verwenden von Typen, die diese Schnittstellen implementieren. Weitere Informationen finden Sie unter Kovarianz und Kontravarianz.
Übereinstimmungs- und Reihenfolgenvergleiche
Im System-Namespace definieren die generische System.IComparable<T>-Schnittstelle und die generische System.IEquatable<T>-Schnittstelle (wie ihre nicht generischen Entsprechungen) Methoden für Reihenfolgen- bzw. Übereinstimmungsvergleiche. Typen implementieren diese Schnittstellen, um die Durchführungsfähigkeit für solche Vergleiche zu bieten.
Im System.Collections.Generic-Namespace bieten die generischen Schnittstellen IComparer<T> und IEqualityComparer<T> eine Möglichkeit zum Definieren von Reihenfolgen- oder Übereinstimmungsvergleichen für Typen, die die Schnittstelle System.IComparable<T> oder System.IEquatable<T> nicht implementieren. Sie bieten auch eine Möglichkeit, diese Beziehungen für Typen erneut zu definieren, die diese Schnittstellen implementieren.
Diese Schnittstellen werden von Methoden und Konstruktoren vieler generischer Auflistungsklassen verwendet. Sie können beispielsweise ein generisches IComparer<T>-Objekt an den Konstruktor der SortedDictionary<TKey,TValue>-Klasse übergeben, um eine Sortierreihenfolge für einen Typ anzugeben, der keine generischen System.IComparable<T>-Schnittstellen implementiert. Für die generische statische Array.Sort-Methode und für die List<T>.Sort-Instanzmethode sind Überladungen zum Sortieren von Arrays und Listen mithilfe der generischen IComparer<T>-Implementierungen vorhanden.
Die generischen Klassen Comparer<T> und EqualityComparer<T> stellen Basisklassen für Implementierungen der generischen Schnittstellen IComparer<T> und IEqualityComparer<T> sowie standardmäßige Reihenfolgen- und Übereinstimmungsvergleiche mithilfe der Eigenschaften Comparer<T>.Default bzw. EqualityComparer<T>.Default bereit.
Auflistungsfunktionalität
Die generische ICollection<T>-Schnittstelle ist die Basisschnittstelle für generische Auflistungstypen. Sie stellt grundlegende Funktionen zum Hinzufügen, Entfernen, Kopieren und Auflisten von Elementen bereit. ICollection<T> erbt sowohl von der generischen IEnumerable<T> als auch von der nicht generischen IEnumerable.
Die generische IList<T>-Schnittstelle erweitert die generische ICollection<T>-Schnittstelle um Methoden für den indizierten Abruf.
Die generische IDictionary<TKey,TValue>-Schnittstelle erweitert die generische ICollection<T>-Schnittstelle um Methoden für den Abruf anhand von Schlüsseln. Generische Wörterbuchtypen in der .NET-Basisklassenbibliothek implementieren auch die nicht generische Schnittstelle IDictionary.
Die generische IEnumerable<T>-Schnittstelle stellt eine generische Enumeratorstruktur bereit. Die generische IEnumerator<T>-Schnittstelle, die von generischen Enumeratoren implementiert wird, erbt die nicht generische IEnumerator-Schnittstelle. Die Member MoveNext und Reset, die nicht vom
T
-Typparameter abhängig sind, sind nur für die nicht generische Schnittstelle vorhanden. Dies bedeutet, dass jeder Consumer der nicht generischen Schnittstelle auch die generische Schnittstelle verwenden kann.
Mathematische Funktionalität
In .NET 7 werden generische Schnittstellen im Namespace System.Numerics eingeführt, die zahlenähnliche Typen und die für sie verfügbare Funktionalität beschreiben. Die 20 numerischen Typen, die die .NET-Basisklassenbibliothek bereitstellt, z. B Int32 und Double, wurden so aktualisiert, dass diese Schnittstellen implementiert werden. Die prominenteste dieser Schnittstellen ist INumber<TSelf>, was in etwa einer „reellen“ Zahl entspricht.
Weitere Informationen zu diesen Schnittstellen finden Sie unter Generische Mathematik.