¿Qué significa "T" en C #?

79

Tengo experiencia en VB y me estoy convirtiendo a C # para mi nuevo trabajo. También estoy tratando de mejorar en .NET en general. He visto que la palabra clave "T" se usa mucho en las muestras que publica la gente. ¿Qué significa la "T" en C #? Por ejemplo:

public class SomeBase<T> where T : SomeBase<T>, new()

¿Qué hace T? ¿Por qué querría usarlo?

Jim
fuente
1
T ~ >> tipo: cualquier tipo que desee
AminM

Respuestas:

50

Es un símbolo de un parámetro de tipo genérico . También podría ser otra cosa, por ejemplo:

public class SomeBase<GenericThingy> where GenericThingy : SomeBase<GenericThingy>, new()

Solo T es el predeterminado utilizado y recomendado por Microsoft.

user39603
fuente
45

T no es una palabra clave per se, sino un marcador de posición para un tipo genérico. Consulte la Introducción a los genéricos de Microsoft

La sintaxis equivalente de VB.Net sería:

Public Class SomeBase(Of T As {Class, New}))
Rob Walker
fuente
15

Un buen ejemplo de otro nombre utilizado en lugar de T wouldson las clases de tabla hash, por ejemplo

public class Dictionary<K,V> ...

Donde Ksignifica clave y Vvalor. Creo que Tsignifica tipo.

Puede que hayas visto esto por ahí. Si puede hacer la conexión, debería ser bastante útil.

biozinc
fuente
5

Eso sería un "genérico". Como la gente ya ha mencionado, hay una explicación de Microsoft del concepto. En cuanto a por qué la "T" - vea esta pregunta .

En pocas palabras, le permite crear una clase / método que se especializa en un tipo específico. Un ejemplo clásico es la System.Collections.Generic.List<T>clase. Es lo mismo que System.Collections.ArrayList, excepto que le permite almacenar solo el artículo de tipo T. Esto proporciona seguridad de tipos: no puede (accidentalmente o de otro modo) poner elementos del tipo incorrecto en su lista. El System.Collections.Genericespacio de nombres contiene varios otros tipos de colecciones diferentes que hacen uso de esto.

En cuanto a dónde podría usarlo, eso depende de usted. Hay muchos casos de uso que surgen de vez en cuando. En su mayoría, es una especie de colección hecha por uno mismo (cuando las incorporadas no son suficientes), pero realmente podría ser cualquier cosa.

Vilx-
fuente
3

La mejor manera sería familiarizarse con "Genéricos", muchos recursos en la web, aquí hay uno

T no es una palabra clave sino un nombre, podría ser cualquier cosa que yo sepa, pero T es la convención (cuando solo se necesita un tipo, de coruse)

Yossi Dahan
fuente
2

El Tes el nombre para el parámetro de tipo de una clase genérica. Significa "Tipo", pero también podrías llamarlo "Alice".

Utiliza genéricos para aumentar la reutilización de una manera segura de tipos sin duplicar el código innecesariamente. Por lo tanto, no es necesario para las clases de escritura para ListOfIntegers, ListOfStrings, ListOfChars, ListOfPersonsy así sucesivamente, pero puede en cambio escribir una clase genérica List<T>y luego instanciar objetos de tiposList<Int32> , List<string>, List<char>y List<Person>. El compilador hace el trabajo por usted.

jason
fuente
1

Significa "cualquier clase". Podría ser "B", "A", lo que sea. Creo que se usa T debido a "Plantilla"

Otávio Décio
fuente
El tipo sería más apropiado que la clase en este contexto, ya que T puede ser tanto una referencia como un tipo de valor.
Brian Rasmussen
1
Creo que la terminología de "Plantilla" proviene de las plantillas de C ++. El parámetro en mayúsculas de una sola letra huele a macros de C ++.
Michael Meadows
Definitivamente, T es el favorito para el mismo rol en las plantillas de C ++ (pero todavía es la abreviatura de "Tipo"; está reemplazando a un Tipo, no a una Plantilla)
James Curran