Co oznacza „T” w C #?

79

Mam tło VB i przechodzę do C # dla mojej nowej pracy. Generalnie staram się też polepszyć .NET. Widziałem słowo kluczowe „T” często używane w próbkach, które ludzie publikują. Co oznacza „T” w języku C #? Na przykład:

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

Co robi T? Dlaczego miałbym go używać?

Jim
źródło
1
T ~ >> typ: dowolny typ
AminM

Odpowiedzi:

50

Jest to symbol parametru typu ogólnego . Równie dobrze może to być coś innego, na przykład:

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

Tylko T jest domyślnym, używanym i zalecanym przez firmę Microsoft.

user39603
źródło
45

T nie jest słowem kluczowym jako takim, ale symbolem zastępczym dla typu ogólnego. Zobacz Wprowadzenie firmy Microsoft do typów ogólnych

Równoważna składnia VB.Net wyglądałaby następująco:

Public Class SomeBase(Of T As {Class, New}))
Rob Walker
źródło
15

Dobrym przykładem innej nazwy używanej zamiast T mogą wouldbyć klasy tablic mieszających, np

public class Dictionary<K,V> ...

Gdzie Koznacza klucz i Vwartość. Myślę, że Toznacza typ.

Mogłeś to widzieć dookoła. Jeśli możesz nawiązać połączenie, powinno to być dość pomocne.

biocynk
źródło
5

To byłby „ogólny”. Jak już wspomniano, istnieje wyjaśnienie tego pojęcia przez Microsoft . Co do powodu „T” - zobacz to pytanie .

Krótko mówiąc, pozwala na stworzenie klasy / metody, która jest wyspecjalizowana do określonego typu. Klasycznym przykładem jest System.Collections.Generic.List<T>klasa. Działa tak samo, jak System.Collections.ArrayListpoza tym, że pozwala na przechowywanie tylko danego typu T. Zapewnia to bezpieczeństwo typów - nie możesz (przypadkowo lub w inny sposób) umieszczać elementów niewłaściwego typu na swojej liście. Przestrzeń System.Collections.Genericnazw zawiera kilka innych różnych typów kolekcji, które z tego korzystają.

Jeśli chodzi o to, gdzie możesz go użyć - to zależy od Ciebie. Istnieje wiele przypadków użycia, które pojawiają się od czasu do czasu. Przeważnie jest to coś w rodzaju własnej kolekcji (jeśli te wbudowane nie wystarczą), ale naprawdę może to być wszystko.

Vilx-
źródło
3

Najlepszym sposobem byłoby zapoznanie się z „rodzajami generycznymi”, wieloma zasobami w sieci, oto jeden

T nie jest słowem kluczowym, ale nazwą, może to być cokolwiek, o ile wiem, ale T jest konwencją (kiedy potrzebny jest tylko jeden typ, z powodu)

Yossi Dahan
źródło
2

Plik T nazwa parametru typu w klasie ogólnej. To oznacza „typ”, ale równie dobrze możesz nazwać go „Alice”.

Używasz typów ogólnych, aby zwiększyć możliwość ponownego wykorzystania w sposób bezpieczny dla typów bez niepotrzebnego powielania kodu. Tak więc, nie trzeba pisać dla klas ListOfIntegers, ListOfStrings, ListOfChars, ListOfPersonsi tak dalej, ale może zamiast pisać rodzajowe klasy List<T>i następnie wystąpień obiektów typów List<Int32>, List<string>, List<char>i List<Person>. Kompilator wykona pracę za Ciebie.

Jason
źródło
1

To znaczy „dowolna klasa”. Może to być „B”, „A”, cokolwiek. Myślę, że T jest używany z powodu „Szablon”

Otávio Décio
źródło
Typ byłby bardziej odpowiedni niż klasa w tym kontekście, ponieważ T może być zarówno typem referencyjnym, jak i wartościowym.
Brian Rasmussen
1
Uważam, że terminologia „Szablon” pochodzi z szablonów C ++. Parametr składający się z pojedynczej litery, pisany wielkimi literami, pachnie jak makra C ++.
Michael Meadows,
T jest zdecydowanie faworyzowany za tę samą rolę w szablonach C ++ (ale nadal jest skrótem od „Type” - zajmuje miejsce typu, a nie szablonu)
James Curran,