Parâmetros de tipo genérico (Guia de Programação em C#)Generic Type Parameters (C# Programming Guide)

Na definição de um tipo genérico ou método, parâmetros de tipo são um espaço reservado para um tipo específico que o um cliente especifica ao instanciar uma variável do tipo genérico.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. Uma classe genérica, como GenericList<T>, listada em Introdução aos Genéricos, não pode ser usada no estado em que se encontra porque não é realmente um tipo, mas um plano gráfico de um tipo.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. Para usar GenericList<T>, o código cliente deve declarar e instanciar um tipo construído, especificando um argumento de tipo entre colchetes.To use GenericList<T>, client code must declare and instantiate a constructed type by specifying a type argument inside the angle brackets. O argumento de tipo para essa classe específica pode ser qualquer tipo reconhecido pelo compilador.The type argument for this particular class can be any type recognized by the compiler. É possível criar qualquer quantidade de instâncias do tipo construído, cada uma usando um argumento de tipo diferente, da seguinte maneira: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>();

Em cada uma dessas instâncias de GenericList<T>, todas as ocorrências de T na classe serão substituídas em tempo de execução com o argumento de tipo.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. Por meio dessa substituição, cria-se três objetos separados eficientes e fortemente tipados usando uma única definição de classe.By means of this substitution, we have created three separate type-safe and efficient objects using a single class definition. Para obter mais informações sobre como essa substituição é executada pelo CLR, consulte Genéricos em Tempo de Execução.For more information on how this substitution is performed by the CLR, see Generics in the Run Time.

Diretrizes para a Nomenclatura de Parâmetros de TipoType Parameter Naming Guidelines

  • Nomeie parâmetros de tipo genérico com nomes descritivos, a menos que um nome com uma única letra seja autoexplicativo e um nome descritivo não agregue valor.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> { /*...*/ }
    
  • Considere usar T como o nome do parâmetro de tipo em tipos com parâmetro de tipo de uma letra.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 { /*...*/ }
    
  • Insira o prefixo “T” em nomes descritivos de parâmetro de tipo.Do prefix descriptive type parameter names with "T".

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Considere indicar as restrições colocadas em um parâmetro de tipo no nome do parâmetro.Consider indicating constraints placed on a type parameter in the name of parameter. Por exemplo, um parâmetro restrito a ISession pode ser chamado TSession.For example, a parameter constrained to ISession may be called TSession.

Consulte tambémSee Also