web-dev-qa-db-fra.com

En c #, que signifie 'où T: classe'?

En C #, qu'est-ce que where T : class signifier?

C'est à dire.

public IList<T> DoThis<T>() where T : class
118
Makach

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.

100
Andy Rose

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).

37
Oded

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 .

33
Donut

Cela limite T à types de référence. Vous ne pourrez pas y mettre les types de valeur (structs et les types primitifs sauf string).

13
Vilx-

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>();
9
Isak Savo

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
 }
7
explorer

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 #)

4
Carlos

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.").

4
AsifQadri

Ici, T fait référence à une classe. Il peut s'agir d'un type de référence.

2
Hemant Kumar

'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
1
Randy Minder