2008-12-17 7 views
9

¿Hay alguna razón para el uso de 'T' en los genéricos? ¿Es algún tipo de abreviatura? Hasta donde yo sé, todo funciona. Por ejemplo¿Por qué los genéricos a menudo usan T?

public G Say<G>(){ ... } 

o incluso

public Hello Say<Hello>(){ ... } 
+0

Preguntado aquí [¿qué-does-t-mean-in-c?] (Http://stackoverflow.com/questions/400314/what-does-t-mean-in-c?lq=1) también. – nawfal

Respuesta

29

T es para T ype. Pero en realidad es solo una tradición y no hay nada que te impida usar otros nombres. Por ejemplo, los diccionarios genéricos usan <TKey, TValue>.

También hay un Microsoft guideline que recomienda el uso de la letra T si tiene un único parámetro de tipo, y el prefijo a los nombres de los parámetros descriptivos con T si tiene más de uno. Hacerlo proporcionará una sensación más uniforme en todo su código.

8

T para el tipo, como como usted ha dicho todo funciona fine.But poner T en ese lugar le recordamos que es de tipo genérico.

4

oh, yo habría pensado T para cosa :)

+0

Pensé que era T para "¡Esto es totalmente rock!" –

+0

Pensé que era T para 2 en 4. –

+0

+1 y pensé que era para * it. – kenny

7

Es sólo una forma abreviada como que se utiliza convencionalmente para las interfaces de .NET, y en otros entornos C se utiliza a veces para las clases (Delphi utiliza esto, IIRC)

En general, "T" en sí mismo significa "el parámetro de tipo único en este contexto" y si tiene múltiples parámetros de tipo, obtienen un prefijo T, p. Ej. Dictionary<TKey, TValue>. Simplemente hace que sea obvio cuando estás leyendo el código que es un parámetro de tipo en lugar de un tipo de concreto específico.

0

Tipo T para

También, E se utiliza para el elemento que es muy común también. Tienes razón G también funciona.

2

También puede haber un poco de tradición, ya que las plantillas de C++ usan T la mayoría de las veces, y los genéricos tienen una función similar a las plantillas de C++, cuando se usan para programación genérica.

1

Si su tipo genérico representa algo especial, puede hacer que sea más precisa .. Por lo general prefijándolo con T: IRepository<TEntity>, SomeCollection<TItem, TComparer> ..

0

pensé que era T para la plantilla, ya que aparece por primera vez en C++.

Cuestiones relacionadas