Parametri di tipo generico (Guida per programmatori C#)

Nella definizione di un metodo o di un tipo generico, un parametro di tipo è un segnaposto per un tipo specificato da un client al momento della creazione di un'istanza di una variabile del tipo generico. Una classe generica, ad esempio GenericList<T> elencata in Introduzione ai generics (Guida per programmatori C#), non può essere utilizzata così com'è perché non rappresenta effettivamente un tipo, ma è piuttosto simile a un progetto iniziale per un tipo. Per utilizzare GenericList<T>, il codice client deve dichiarare e creare un'istanza di un tipo costruito specificando un argomento di tipo racchiuso tra parentesi angolari. L'argomento di tipo per questa classe particolare può essere qualsiasi tipo riconosciuto dal compilatore. È possibile creare un numero indefinito di istanze di tipi costruiti, ognuna delle quali utilizza un argomento di tipo diverso, come riportato di seguito:

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

In ognuna di queste istanze di GenericList<T>, tutte le occorrenze di T nella classe verranno sostituite in fase di esecuzione con l'argomento di tipo. Tramite questa sostituzione, sono stati creati tre diversi oggetti efficienti e indipendenti dai tipi utilizzando una sola definizione di classe. Per ulteriori informazioni sulle modalità di esecuzione di questa sostituzione da parte di CLR, vedere Generics nel runtime (Guida per programmatori C#).

Linee guida per l'assegnazione di nomi ai parametri di tipo

  • Creare parametri di tipo generico con nomi descrittivi, a meno che un nome composto da una singola lettera non sia già di facile comprensione e un nome descrittivo sarebbe superfluo.

    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }
    
  • Considerare l'utilizzo di T come nome di parametro per tipi con parametri di tipo composti da una singola lettera.

    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }
    
  • Creare nomi di parametri di tipo con prefissi descrittivi con "T".

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Considerare l'indicazione di vincoli posizionati su un parametro di tipo nel nome del parametro. Ad esempio, un parametro vincolato a ISession potrebbe essere denominato TSession.

Vedere anche

Riferimenti

Generics (Guida per programmatori C#)

Differenze tra modelli C++ e generics C# (Guida per programmatori C#)

System.Collections.Generic

Concetti

Guida per programmatori C#