Réponses:
En termes simples, cela contraint le paramètre générique à une classe (ou plus spécifiquement à un type de référence qui pourrait être un type de classe, d'interface, de délégué ou de tableau).
Consultez cet article MSDN pour plus de détails.
C'est une contrainte de type générique . Dans ce cas, cela signifie que le type générique Tdoit être un type de référence (type classe, interface, délégué ou tableau).
C'est une contrainte de type sur T, spécifiant qu'il doit s'agir d'une classe.
La whereclause peut être utilisée pour spécifier d'autres contraintes de type, par exemple:
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
Pour plus d'informations, consultez la page MSDN sur la whereclause ou les contraintes de paramètres génériques .
where T : class, IComparable, new()
Cela se limite Taux types de référence . Vous ne pourrez pas y mettre de types valeur ( structs et types primitifs sauf string).
cela signifie que le type utilisé Tlorsque la méthode générique est utilisée doit être une classe - c'est-à-dire qu'il ne peut pas être une structure ou un nombre intégré comme intoudouble
// Valid:
var myStringList = DoThis<string>();
// Invalid - compile error
var myIntList = DoThis<int>();
where T: class signifie littéralement que T has to be a class. Il peut s'agir de n'importe quel type de référence. Maintenant , chaque fois que le code appelle votre DoThis<T>()méthode , il doit fournir une classe pour remplacer T . Par exemple, si je devais appeler votre DoThis<T>()méthode, je devrai l'appeler comme suit:
DoThis<MyClass>();
Si votre metthod ressemble à ce qui suit:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Ensuite, partout où T apparaît dans votre méthode, il sera remplacé par MyClass. Ainsi, la méthode finale que le compilateur appelle ressemblera à ce qui suit:
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()n'est pas possible avec where T : class. vous devez spécifier where T: new()pour être autorisé à le faire.
C'est ce qu'on appelle une contrainte de paramètre de type. En fait, il contraint ce que peut être le type T.
L'argument type doit être un type référence; cela s'applique également à tout type de classe, d'interface, de délégué ou de tableau.
Contraintes sur les paramètres de type (Guide de programmation C #)
Ici, T fait référence à une classe, ce peut être un type de référence.
«T» représente un type générique. Cela signifie qu'il peut accepter n'importe quel type de classe. L'article suivant peut vous aider:
http://www.15seconds.com/issue/031024.htm