W C # co to where T : class
znaczy?
To znaczy.
public IList<T> DoThis<T>() where T : class
Odpowiedzi:
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 .
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).
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ów string
).
where T: class
dosłownie to znaczy T 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:
DoThis<MyClass>();
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
}
new T()
nie jest możliwe z where 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.
Argument typu musi być typem referencyjnym; dotyczy to również dowolnej klasy, interfejsu, delegata lub typu tablicy.
Tutaj T odnosi się do Class, może to być typ referencyjny.
„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