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 criar uma instância do tipo genérico.In a generic type or method definition, a type parameter is a placeholder for a specific type that a client specifies when they create an instance 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 sã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 is 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.

A regra de análise de código CA1715 pode ser usada para garantir que os parâmetros de tipo sejam nomeados adequadamente.The code analysis rule CA1715 can be used to ensure that type parameters are named appropriately.

Consulte tambémSee also