Generic Type Parameters (C# Programming Guide)
Em um tipo genérico ou definição de método, os tipos de parâmetros é um espaço reservado para um tipo específico que um cliente Especifica quando eles instanciar uma variável do tipo genérico. Classe de um genérico, como GenericList<T> na Introduction to Generics (C# Programming Guide), não pode ser usado como-porque ele não é realmente um tipo; é mais como um plano para um tipo. Para usar GenericList<T>, código do cliente deve declarar e criar uma instância de um tipo construído, especificando um argumento de tipo dentro de colchetes angulares. O argumento de tipo para esta classe em particular pode ser qualquer tipo reconhecido pelo compilador. Qualquer número de instâncias do tipo construído pode ser criado, cada um usando um argumento de tipo diferente, como segue:
GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();
Em cada uma dessas instâncias de GenericList<T>, cada ocorrência de T na classe será substituída em tempo de execução com o argumento de tipo. Por meio dessa substituição, criamos três tipo seguro e eficientes objetos separados usando uma única definição de classe. Para obter mais informações sobre como essa substituição é executada pelo CLR, consulte Genéricos no Executar Hora (guia de programação C#).
Diretrizes de nomeação de parâmetro de tipo
Fazer nome de parâmetros de tipo genérico com nomes descritivos, a menos que o nome de um única letra é totalmente auto-explicativo e um nome descritivo não adicionaria valor.
public interface ISessionChannel<TSession> { /*...*/ } public delegate TOutput Converter<TInput, TOutput>(TInput from); public class List<T> { /*...*/ }
Considere a possibilidade de usando o t como o nome do parâmetro de tipo para tipos com um parâmetro de tipo de letra único.
public int IComparer<T>() { return 0; } public delegate bool Predicate<T>(T item); public struct Nullable<T> where T : struct { /*...*/ }
Fazer o prefixo de nomes de parâmetro de tipo descritivo com "T".
public interface ISessionChannel<TSession> { TSession Session { get; } }
Considere a possibilidade de indicando restrições colocadas em um parâmetro de tipo, o nome do parâmetro. Por exemplo, um parâmetro é restrita a ISession pode ser chamado de TSession.
Consulte também
Referência
Generics (C# Programming Guide)
Differences Between C++ Templates and C# Generics (C# Programming Guide)