8
votes

Qu'est-ce que "où T: classe" dans les méthodes génériques C #?

Quelle est la différence entre ces signatures de méthode? xxx

et xxx

Ils semblent avoir le même résultat ... Qu'est-ce que où t: classe fait?


1 commentaires

Ce qui n'est pas clair sur The Docs ?


4 Réponses :


11
votes

Dans la deuxième méthode, le T ne peut être qu'une classe et ne peut pas être un type de structure.

voir Contraintes sur les paramètres de type (Guide de programmation C #) : < / p>

où T: classe

l'argument de type doit être une référence [classe] Type ; Ceci s'applique également à n'importe quelle classe, interface, déléguée ou tableau.


0 commentaires

1
votes

Il n'y a pas de différence, mais T est limité à un type de référence. Ils ne diffèrent qu'à compilétime, car le compilateur vérifie que Wether T est un type REF ou non.


1 commentaires

Alors alors là est une différence ;-) Je me demande s'ils émettent le même IL (par exemple, cette information est-elle conservée?)



6
votes

Dans la première, vous pouvez l'appeler avec un type non-ref de type par exemple

MyMethod<int>(10);


0 commentaires

1
votes
  1. Les deux ne compilent pas. Vous devez utiliser void ou t .
  2. et deuxième méthode ne fonctionnera pas pour myMethod (1) car il nécessite un type de référence sur t

0 commentaires