Что означает «Т» в C #?

79

У меня есть опыт работы с VB, и я перехожу на C # для моей новой работы. Я также пытаюсь улучшить .NET в целом. Я видел, как ключевое слово "T" часто используется в примерах, которые публикуют люди. Что означает буква «T» в C #? Например:

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

Что Tделать? Зачем мне это использовать?

Джим
источник
1
T ~ >> введите: любой, какой хотите
AminM

Ответы:

50

Это символ параметра универсального типа . С таким же успехом это может быть что-то еще, например:

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

Только T используется по умолчанию и поощряется Microsoft.

user39603
источник
15

Хорошим примером другого имени, используемого вместо T, wouldявляются классы хеш-таблицы, например

public class Dictionary<K,V> ...

Где Kозначает ключ и Vзначение. Я думаю, это Tозначает тип.

Вы могли это видеть. Если вы можете установить связь, это должно быть довольно полезно.

биоцинк
источник
5

Это было бы «универсальным». Как уже упоминалось, существует объяснение концепции Microsoft . Насчет того, почему именно "Т" - смотрите в этом вопросе .

Вкратце, он позволяет вам создать класс / метод, специализированный для определенного типа. Классический пример - System.Collections.Generic.List<T>класс. Он такой же, как System.Collections.ArrayList, за исключением того, что позволяет хранить только элементы типа T. Это обеспечивает безопасность типов - вы не можете (случайно или иным образом) поместить элементы неправильного типа в свой список. Пространство System.Collections.Genericимен содержит несколько других различных типов коллекций, которые используют это.

А где его использовать - решать вам. Время от времени возникает множество вариантов использования. В основном это какая-то самодельная коллекция (когда встроенных не хватает), но это действительно может быть что угодно.

Вилкс-
источник
3

Лучшим способом было бы познакомиться с "Generics", многими ресурсами в Интернете, вот один

T - это не ключевое слово, а имя, может быть что угодно, насколько я знаю, но T - это соглашение (когда нужен только один тип, coruse)

Йоси Дахан
источник
2

Это Tимя параметра типа в универсальном классе. Это означает «Тип», но вы могли бы с таким же успехом назвать его «Алиса».

Вы используете дженерики для повышения возможности повторного использования безопасным для типов способом без ненужного дублирования кода. Таким образом, вам не нужно писать для классов ListOfIntegers, ListOfStrings, ListOfChars, ListOfPersonsи так далее , но вместо этого можно написать универсальный класс , List<T>а затем создавать объекты типов List<Int32>, List<string>, List<char>и List<Person>. Компилятор делает всю работу за вас.

Джейсон
источник
1

Это означает «любой класс». Это может быть «Б», «А», что угодно. Я думаю, что T используется из-за "Template"

Отавио Десио
источник
Тип был бы более подходящим, чем класс в этом контексте, поскольку T может быть как ссылочным, так и типом значения.
Брайан Расмуссен,
1
Я считаю, что терминология «шаблон» пришла из шаблонов C ++. Однобуквенный параметр с заглавной буквы пахнет макросами C ++.
Майкл Медоуз,
T определенно отдается той же роли в шаблонах C ++ (но там он по-прежнему сокращается от «Тип» - он заменяет тип, а не шаблон)
Джеймс Карран