W C # co to where T : class
znaczy?
To znaczy.
public IList<T> DoThis<T>() where T : class
Mówiąc najprościej, ogranicza to ogólny parametr do klasy (lub dokładniej do typu referencyjnego, który może być klasą, interfejsem, delegatem lub typem tablicy).
Więcej informacji można znaleźć w tym artykule MSDN .
Jest to ograniczenie typu
T
, określające, że musi to być klasa.where
Klauzula może być użyta do określenia innych ograniczeń typu, np:where T : struct // T must be a struct where T : new() // T must have a default parameterless constructor where T : IComparable // T must implement the IComparable interface
Aby uzyskać więcej informacji, sprawdź stronę MSDN dotyczącą
where
klauzuli lub ogólnych ograniczeń parametrów .źródło
where T : class, IComparable, new()
Jest to ogólne ograniczenie typu . W tym przypadku oznacza to, że typ ogólny
T
musi być typem referencyjnym (typem klasy, interfejsu, delegata lub tablicy).źródło
To ogranicza się
T
do typów referencyjnych . Nie będzie można tam umieszczać typów wartości (struct
z wyjątkiem typów pierwotnych i typówstring
).źródło
oznacza to, że typ używany jako
T
metoda ogólna musi być klasą - tj. nie może być strukturą ani liczbą wbudowaną, jakint
lubdouble
// Valid: var myStringList = DoThis<string>(); // Invalid - compile error var myIntList = DoThis<int>();
źródło
where T: class
dosłownie to znaczyT has to be a class
. Może to być dowolny typ odniesienia. Teraz, gdy dowolny kod wywołuje swojąDoThis<T>()
metodę musi dostarczyć klasę zastąpić T . Na przykład, gdybym miał wywołać twojąDoThis<T>()
metodę, będę musiał to wywołać w następujący sposób:Jeśli twoja metoda jest podobna do poniższej:
public IList<T> DoThis<T>() where T : class { T variablename = new T(); // other uses of T as a type }
Wtedy wszędzie tam, gdzie w Twojej metodzie pojawi się T, zostanie zastąpione przez MyClass. Zatem ostatnia metoda wywoływana przez kompilator będzie wyglądać następująco:
public IList<MyClass> DoThis<MyClass>() { MyClass variablename= new MyClass(); //other uses of MyClass as a type // all occurences of T will similarly be replace by MyClass }
źródło
new T()
nie jest możliwe zwhere T : class
. musisz określić,where T: new()
czy chcesz to zrobić.Nazywa się to ograniczeniem parametru typu. Skutecznie ogranicza to, jaki może być typ T.
Ograniczenia dotyczące parametrów typu (przewodnik programowania w języku C #) Constraints on Type Parameters (C # Programming Guide)
źródło
T reprezentuje typ obiektu, oznacza to, że możesz podać dowolny typ. IList: jeśli IList s = new IList; Teraz s.add ("Zawsze akceptuj ciąg.").
źródło
Tutaj T odnosi się do Class, może to być typ referencyjny.
źródło
„T” reprezentuje typ ogólny. Oznacza to, że może przyjmować dowolny typ zajęć. Poniższy artykuł może pomóc:
http://www.15seconds.com/issue/031024.htm
źródło