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ć?


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.


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}))

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.


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.


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)


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.


1

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


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.