Compartir a través de


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

En una definición de tipo o método genérico, un parámetro de tipo es un marcador para un tipo especificado por un cliente al crear una instancia de una variable del tipo genérico. Una clase genérica, como GenericList<T>, que se muestra en Introducción a los genéricos (Guía de programación de C#), no se puede utilizar tal cual, porque no es realmente un tipo, sino el plano de un tipo. Para utilizar GenericList<T>, el código de cliente debe declarar y crear una instancia de un tipo construido especificando un argumento de tipo dentro de los corchetes angulares. El argumento de tipo para esta clase determinada puede ser cualquier tipo reconocido por el compilador. Se puede crear cualquier número de instancias del tipo construido, cada una de ellas con un argumento de tipo diferente, de la forma 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 sustituirá en tiempo de ejecución con el argumento de tipo. Mediante esta sustitución, hemos creado tres objetos independientes y eficaces con seguridad de tipos utilizando una sola definición de clase. Para obtener más información sobre cómo el CLR realiza esta sustitución, vea Genéricos en el motor en tiempo de ejecución (Guía de programación de C#).

Instrucciones de nomenclatura de parámetros de tipo

  • Denomine los parámetros de tipo genérico con nombres descriptivos, a menos que un nombre de una sola letra sea muy fácil de entender 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 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 { /*...*/ }
    
  • Añada el prefijo "T" a los nombres de parámetros de tipo descriptivos.

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

Vea también

Referencia

Genéricos (Guía de programación de C#)

Diferencias entre plantillas de C++ y tipos genéricos de C# (Guía de programación de C#)

System.Collections.Generic

Conceptos

Guía de programación de C#