Antworten:
Einfach ausgedrückt bedeutet dies, dass der generische Parameter auf eine Klasse beschränkt wird (oder genauer gesagt auf einen Referenztyp, der eine Klasse, eine Schnittstelle, ein Delegat oder ein Array-Typ sein kann).
Weitere Informationen finden Sie in diesem MSDN-Artikel .
Es ist eine generische Typeinschränkung . In diesem Fall bedeutet dies, dass der generische Typ Tein Referenztyp sein muss (Klasse, Schnittstelle, Delegat oder Array-Typ).
Dies ist eine Typbeschränkung T, die angibt, dass es sich um eine Klasse handeln muss.
Die whereKlausel kann verwendet werden, um andere Typeinschränkungen anzugeben, z.
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
Weitere Informationen finden Sie auf der MSDN-Seite zur whereKlausel oder unter allgemeinen Parametereinschränkungen .
where T : class, IComparable, new()
Das beschränkt sich Tauf Referenztypen . Sie können dort keine Werttypen ( structaußer s und primitiven Typen string) einfügen.
Dies bedeutet, dass der Typ, der Tbei Verwendung der generischen Methode verwendet wird, eine Klasse sein muss - dh es kann keine Struktur oder eingebaute Zahl wie intoder seindouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class bedeutet wörtlich das T has to be a class. Es kann ein beliebiger Referenztyp sein. Wenn ein Code Ihre DoThis<T>()Methode aufruft , muss er eine Klasse bereitstellen, um T zu ersetzen . Wenn ich zum Beispiel Ihre DoThis<T>()Methode aufrufen würde, müsste ich sie wie folgt aufrufen:
DoThis<MyClass>();
Wenn Ihre Methode wie folgt aussieht:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Wo immer T in Ihrer Methode erscheint, wird es durch MyClass ersetzt. Die endgültige Methode, die der Compiler aufruft, sieht also wie folgt aus:
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()ist nicht möglich mit where T : class. Sie müssen angeben where T: new(), um dies tun zu dürfen.
Es wird als Typparametereinschränkung bezeichnet. Tatsächlich schränkt es ein, welcher Typ T sein kann.
Das Typargument muss ein Referenztyp sein. Dies gilt auch für alle Klassen, Schnittstellen, Delegaten oder Array-Typen.
Einschränkungen bei Typparametern (C # -Programmierhandbuch)
Hier bezieht sich T auf eine Klasse. Es kann ein Referenztyp sein.
'T' steht für einen generischen Typ. Dies bedeutet, dass jede Art von Klasse akzeptiert werden kann. Der folgende Artikel könnte helfen:
http://www.15seconds.com/issue/031024.htm