Parámetros de tipos genéricos (Guía de programación de C#)

En un tipo genérico o en una definición de método, un parámetro de tipo es un marcador de posición para un tipo específico que un cliente especifica cuando crean instancias de una variable del tipo genérico. Una clase genérica, como GenericList<T> que se muestra en Introducción a los genéricos, no puede usarse como está porque no es realmente un tipo; es más parecida a un plano para un tipo. Para usar GenericList<T>, el código cliente debe declarar y crear instancias de un tipo construido especificando un argumento de tipo dentro de corchetes angulares. El argumento de tipo de esta clase determinada puede ser cualquier tipo reconocido por el compilador. Puede crearse cualquier número de instancias de tipo construidas, usando cada una un argumento de tipo diferente, de la manera siguiente:

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

En cada una de estas instancias de GenericList<T>, cada aparición de T en la clase se sustituye en tiempo de ejecución con el argumento de tipo. Mediante esta sustitución, hemos creado tres objetos eficaces y con seguridad de tipos independientes con una definición de clase única. Para obtener más información sobre cómo se realiza esta sustitución mediante CLR, vea Genéricos en tiempo de ejecución.

Instrucciones de nomenclatura de los parámetros de tipo

  • Asigne nombres descriptivos a los parámetros de tipo genérico, a no ser que un nombre de una sola letra sea completamente claro y un nombre descriptivo no agregue ningún valor.

    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }
    
  • Considere el uso de T como el nombre del parámetro de tipo para los tipos con un parámetro de tipo de una sola letra.

    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }
    
  • Establezca el prefijo "T" a los nombres de parámetro de tipo descriptivos.

    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }
    
  • Considere la posibilidad de indicar restricciones que se encuentran en un parámetro de tipo en el nombre del parámetro. Por ejemplo, un parámetro restringido a ISession puede llamarse TSession.

La regla de análisis de código CA1715 puede usarse para asegurarse de que los parámetros de tipo se denominan apropiadamente.

Consulte también