341 votes

Que signifie « où T : classe, new() » signifie ?

Pouvez vous s’il vous plaît expliquez-moi ce que `` veut dire dans la ligne de code suivante ?

378voto

NerdFury Points 9935

C’est une contrainte sur le paramètre générique. il doit être une classe (ou type de référence) et doit avoir un constructeur sans paramètre par défaut.

Que signifie T ne peut pas être un int, float, double, DateTime ou autre structure (type valeur).

Ça pourrait être une chaîne ou un autre type de référence personnalisée, tant qu’il possède une valeur par défaut ou un constructeur sans paramètre.

193voto

Justin Niessner Points 144953

Ceux-ci sont de type générique contraintes. Dans votre cas, il y en a deux:

where T : class

Signifie que le type T doit être un type de référence (et non pas un type de valeur).

where T : new()

Signifie que le type T doit avoir un paramètre moins de constructeur. Avoir cette contrainte va vous permettre de faire quelque chose comme T field = new T(); dans votre code, vous ne pourrez pas faire autrement.

Vous puis de combiner les deux à l'aide d'une virgule pour obtenir:

where T : class, new()

140voto

Mohammed Jubayer Points 251

où T : struct

L'argument de type doit être un type de la valeur. Tout type de valeur à l'exception de prendre la valeur null peut être spécifié. Voir Utilisation de Types Nullables (Guide de Programmation C#) pour plus d'informations.

où T : classe

L'argument de type doit être un type de référence, y compris toute la classe, interface, délégué, ou de type tableau. (Voir la note ci-dessous).

où T : new() L'argument de type doit avoir un public constructeur sans paramètre. Lorsqu'il est utilisé conjointement avec d'autres contraintes, la contrainte new() doit être spécifié en dernier.

où T : [nom de classe de base]

L'argument de type doit être ou dériver de la classe de base spécifiée.

où T : [nom de l'interface]

L'argument de type doit être ou implémenter l'interface spécifiée. Plusieurs contraintes d'interface peut être spécifié. Le contraignantes à l'interface peut également être générique.

où T : U

Le type de l'argument fourni pour T doit être ou dériver de l'argument fourni de U. Ceci est appelé une contrainte de type naked.

15voto

Brendan Points 407

new() : Si la contrainte new(), cela signifie type T doit utiliser un constructeur sans paramètre, donc un objet peut être instancié à partir-voir par défaut des constructeurs

classe : Signifie T doit être un type référence donc il ne peut pas être un int, float, double, DateTime ou une autre structure (type valeur).

6voto

Evan Mulawski Points 28536

Cela signifie que ce type de `` doit être une classe et avoir un constructeur qui ne prend pas d’arguments.

Par exemple, vous devez être capable de faire cela :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X