W C # co to where T : classznaczy?
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.
whereKlauzula 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ą whereklauzuli 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 Tmusi być typem referencyjnym (typem klasy, interfejsu, delegata lub tablicy).
To ogranicza się Tdo typów referencyjnych . Nie będzie można tam umieszczać typów wartości ( structz 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