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#)