Generische Typparameter (C#-Programmierhandbuch)Generic Type Parameters (C# Programming Guide)

Bei der Definition eines generischen Typs oder einer Methode ist ein Typparameter ein Platzhalter für einen bestimmten Typ, den ein Client angibt, wenn eine Variable des generischen Typs instanziiert wird.In a generic type or method definition, a type parameters is a placeholder for a specific type that a client specifies when they instantiate a variable of the generic type. Eine generische Klasse, z.B. die unter Einführung in Generika aufgelistete Klasse GenericList<T>, kann nicht ohne Anpassung verwendet werden, denn sie ist nicht wirklich ein Typ, sondern mehr wie die Kopie eines Typs.A generic class, such as GenericList<T> listed in Introduction to Generics, cannot be used as-is because it is not really a type; it is more like a blueprint for a type. Um GenericList<T> verwenden zu können, muss der Clientcode einen konstruierten Typ deklarieren und instanziieren, indem er ein Typargument in spitzen Klammern angibt.To use GenericList<T>, client code must declare and instantiate a constructed type by specifying a type argument inside the angle brackets. Das Typargument für diese spezielle Klasse kann jeder Typ sein, der vom Compiler erkannt wird.The type argument for this particular class can be any type recognized by the compiler. Instanzen von konstruierten Typen können in beliebiger Zahl erstellt werden, wobei jede Instanz ein anderes Typargument verwendet, z.B.:Any number of constructed type instances can be created, each one using a different type argument, as follows:

GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();

Bei jeder dieser Instanzen von GenericList<T> wird jedes Vorkommen von T in der Klasse zur Laufzeit durch das Typargument ersetzt.In each of these instances of GenericList<T>, every occurrence of T in the class will be substituted at run time with the type argument. Aufgrund dieser Ersetzung werden drei separate typsichere und effiziente Objekte mithilfe einer einzigen Klassendefinition erstellt.By means of this substitution, we have created three separate type-safe and efficient objects using a single class definition. Weitere Informationen dazu, wie diese Ersetzung von der CLR ausgeführt wird, finden Sie unter Generika zur Laufzeit.For more information on how this substitution is performed by the CLR, see Generics in the Run Time.

Richtlinien für die Benennung von TypparameternType Parameter Naming Guidelines

  • Verwenden Sie zur Benennung von generischen Typparametern beschreibende Namen, es sei denn, ein Name aus einem einzelnen Buchstaben reicht als Erklärung völlig aus, und ein beschreibender Name würde das Verständnis für den Namen nicht wirklich erhöhen.Do name generic type parameters with descriptive names, unless a single letter name is completely self explanatory and a descriptive name would not add value.

    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }
    
  • Verwenden Sie T als Typparametername für Typen, die einen einzelnen Buchstaben als Typparameter haben.Consider using T as the type parameter name for types with one single letter type parameter.

    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }
    
  • Verwenden Sie das Präfix „T“ für beschreibende Typparameternamen.Do prefix descriptive type parameter names with "T".

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Überlegen Sie, ob Sie Einschränkungen, die für einen Typparameter gelten, im Namen des Parameters angeben möchten.Consider indicating constraints placed on a type parameter in the name of parameter. Ein auf ISession eingeschränkter Parameter könnte z.B. TSession genannt werden.For example, a parameter constrained to ISession may be called TSession.

Siehe auchSee Also

System.Collections.Generic
C#-ProgrammierhandbuchC# Programming Guide
GenerikaGenerics
Unterschiede zwischen C++-Vorlagen und C#-GenerikaDifferences Between C++ Templates and C# Generics