En C #, qu'est-ce que where T : class
signifier?
C'est à dire.
public IList<T> DoThis<T>() where T : class
En termes simples, cela contraint le paramètre générique à une classe (ou plus spécifiquement à un type de référence pouvant être une classe, une interface, un délégué ou un type de tableau).
Voir ceci article MSDN pour plus de détails.
C'est un contrainte de type générique . Dans ce cas, cela signifie que le type générique T
doit être un type de référence (type de classe, d'interface, de délégué ou de tableau).
C'est une contrainte de type sur T
, spécifiant qu'il doit s'agir d'une classe.
La clause where
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 where
clause , ou contraintes de paramètres génériques .
Cela limite T
à types de référence. Vous ne pourrez pas y mettre les types de valeur (struct
s et les types primitifs sauf string
).
cela signifie que le type utilisé en tant que T
lorsque la méthode générique est utilisée doit être une classe - c.-à-d. qu'il ne peut s'agir ni d'une structure ni d'un numéro construit comme int
ou double
// 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
. Ce peut être n'importe quel type de référence. Maintenant, chaque fois que du code appelle votre méthode DoThis<T>()
, il doit fournir une classe à remplacer T . Par exemple, si je devais appeler votre méthode DoThis<T>()
, je devrais l'appeler comme suit:
DoThis<MyClass>();
Si votre méthode ressemble à ce qui suit:
public IList<T> DoThis<T>() where T : class
{
T variablename = new T();
// other uses of T as a type
}
Alors, où que ce soit T dans votre méthode, il sera remplacé par MyClass. Ainsi, la méthode finale appelée par le compilateur se présentera comme 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
}
C'est ce qu'on appelle une contrainte de paramètre de type. Effectivement, il limite ce que le type T peut être.
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 #)
T représente un type d'objet de, cela implique que vous pouvez donner n'importe quel type de. IList: si IList s = new IList; Maintenant à l'addition ("Toujours accepter la chaîne.").
Ici, T fait référence à une classe. Il peut s'agir d'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 cours. L'article suivant pourrait aider:
http://www.15seconds.com/issue/031024.htm