Share via


Übersicht über Generika in .NET Framework

Aktualisiert: November 2007

In diesem Thema finden Sie eine Übersicht über Generika in .NET Framework sowie eine Zusammenfassung generischer Typen oder Methoden. Außerdem wird die Terminologie zur Erörterung der Generika festgelegt.

Definieren und Verwenden von Generika

Generika sind Klassen, Strukturen, Schnittstellen und Methoden, die Platzhalter (Typparameter) für einen oder mehrere Typen besitzen, die in ihnen gespeichert oder von ihnen verwendet werden. Eine generische Auflistungsklasse kann beispielsweise einen Typparameter als Platzhalter für den Typ von Objekten enthalten, die in ihm gespeichert sind. Die Typparameter stellen die Typen ihrer Felder und die Parametertypen ihrer Methoden dar. Eine generische Methode kann beispielsweise ihren Typparameter als den Typ ihres Rückgabewerts oder als den Typ einer ihrer formalen Parameter verwenden. Im folgenden Code wird eine einfache generische Klassendefinition veranschaulicht.

Public Class Generic(Of T)
    Public Field As T
End Class
public class Generic<T> 
{
    public T Field;
}
generic<typename T> public ref class Generic 
{
public:
    T Field;
};

Beim Erstellen der Instanz einer generischen Klasse geben Sie die tatsächlichen Typen an, durch die die Typparameter ersetzt werden sollen. Dadurch wird eine generische Klasse erstellt, die so genannte konstruierte generische Klasse, bei der alle Vorkommen der Typparameter durch die ausgewählten Typen ersetzt sind. Das Ergebnis ist eine typsichere an die ausgewählten Typen angepasste Klasse, wie im folgenden Code veranschaulicht wird.

Dim g As New Generic(Of String)
g.Field = "A string"
Generic<string> g = new Generic<string>();
g.Field = "A string";
Generic<String^>^ g = gcnew Generic<String^>();
g->Field = "A string";

Generika-Terminologie

Die folgenden Begriffe werden in Bezug auf Generika in .NET Framework verwendet:

  • Die generische Typdefinition ist eine Klassen-, Struktur- oder Schnittstellendeklaration, die als Vorlage fungiert und Platzhalter für die Typen besitzt, die sie enthalten oder verwenden kann. Beispielsweise kann die Dictionary<TKey, TValue>-Klasse zwei Typen enthalten: Schlüssel und Werte. Da es sich lediglich um eine Vorlage handelt, können keine Instanzen einer Klasse, Struktur oder Schnittstelle erstellt werden, die eine generische Typdefinition darstellt.

  • Generische Typparameter oder Typparameter sind die Platzhalter in einer generischen Typ- oder Methodendefinition. Der generische Dictionary<TKey, TValue>-Typ besitzt die beiden Typparameter TKey und TValue, die die Typen seiner Schlüssel und Werte darstellen.

  • Ein konstruierter generischer Typ oder konstruierter Typ bezeichnet das Ergebnis der Angabe von Typen für die generischen Typparameter einer generischen Typdefinition.

  • Ein generisches Typargument ist jeder Typ, der durch einen generischen Typparameter ausgetauscht wird.

  • Der allgemeine Begriff "generischer Typ" schließt sowohl konstruierte Typen als auch generische Typdefinitionen ein.

  • Einschränkungen sind Begrenzungen, denen generische Typparameter unterliegen. Beispielsweise können Sie einen Typparameter auf Typen einschränken, die die generische IComparer<T>-Schnittstelle implementieren, um sicherzustellen, dass Instanzen des Typs sortiert werden können. Sie können auch Typparameter auf Typen einschränken, die eine bestimmte Basisklasse mit einem Standardkonstruktor besitzen oder Verweistypen oder Werttypen darstellen. Implementierungen, die den generischen Typ verwenden, können dann keine Typargumente ersetzen, die die Einschränkungen nicht erfüllen.

  • Eine generische Methodendefinition stellt eine Methode mit zwei Parameterlisten dar: eine Liste der generischen Typparameter und eine Liste der formalen Parameter. Typparameter können als Rückgabetyp oder als Typen der formalen Parameter auftreten, wie im folgenden Code veranschaulicht wird.

    Function Generic(Of T)(ByVal arg As T) As T
        Dim temp As T = arg
        ...
    End Function
    
    T Generic<T>(T arg) { T temp = arg; ...}
    
    generic<typename T> T Generic(T arg) { T temp = arg; ...};
    

    Generische Methoden können in generischen oder nicht generischen Typen verwendet werden. Beachten Sie, dass eine Methode nicht notwendigerweise eine generische Methode ist, weil sie zu einem generischen Typ gehört oder weil sie formale Parameter besitzt, deren Typen die generischen Parameter des einschließenden Typs sind. Eine Methode ist nur dann generisch, wenn sie eine eigene Liste von Typparametern besitzt. Im folgenden Code ist nur die Methode G generisch.

    Class A
        Function G(Of T)(ByVal arg As T) As T
            ...
        End Function
    End Class
    Class Generic(Of T)
        Function M(ByVal arg As T) As T
            ...
        End Function
    End Class
    
    class A 
    {
        T G<T>(T arg) {...}
    }
    class Generic<T> 
    {
        T M(T arg) {...}
    }
    
    ref class A 
    {
        generic<T> T G(T arg) {...};
    };
    generic<typename T> ref class Generic 
    {
        T M(T arg) {...};
    };
    

Visual C++, C# und Visual Basic unterstützen alle das Definieren und Verwenden von Generika. Weitere Informationen finden Sie unter Generische Typen in Visual Basic, Einführung in Generika (C#-Programmierhandbuch) und unter Overview of Generics in Visual C++.

Geschachtelte Typen und Generika

Ein in einem generischen Typ geschachtelter Typ kann von den Typparametern des einschließenden generischen Typs abhängen. Die Common Language Runtime betrachtet geschachtelte Typen als generisch, auch wenn sie über keine eigenen generischen Typparameter verfügen. Beim Erstellen einer Instanz eines geschachtelten Typs müssen Typargumente für alle einschließenden generischen Typen angegeben werden.

Siehe auch

Aufgaben

Gewusst wie: Definieren eines generischen Typs mit Reflektionsausgabe

Konzepte

Verwenden von generischen Auflistungen

Generische Typen in Visual Basic

Overview of Generics in Visual C++

Generische Auflistungen in .NET Framework

Generische Delegaten zum Bearbeiten von Arrays und Listen

Generische Schnittstellen

Vorteile und Einschränkungen von Generika

Referenz

System.Collections.Generic

System.Collections.ObjectModel

Einführung in Generika (C#-Programmierhandbuch)

Weitere Ressourcen

Häufig verwendete Auflistungstypen

Reflektion und generische Typen

Generika in .NET Framework