J'ai lu récemment que les normes C # et CLI définissent différentes manières de gérer des types de valeur et des constructeurs. P>
Selon les types de valeurs de spécification CLI ne peut pas avoir de constructeurs sans paramètre, alors que dans les types de valeur de spécification C # ont un constructeur sans paramètre par défaut. Si, selon la spécification CLI, vous devez créer une valeur sans spécifier de paramètres, il y a une instruction spéciale pour le faire. p>
Alors mes questions sont p>
3 Réponses :
alors que dans les types de valeur de spécification C # ont un constructeur sans paramétrage par défaut p> blockQuote>
que vous ne pouvez pas changer. L'effet est donc pareil, juste défini différemment. P>
Dans divers endroits, il est logique d'un point de vue em> consistant à penser à des types de valeur comme ayant un constructeur sans paramètre. Vous pouvez toujours créer une valeur sans fournir d'arguments, et c'est vrai dans la CLI et C #. Dans C #, vous pouvez simplement utiliser la syntaxe de constructeur standard:
public void Foo<T>() where T : new() { T t = new T(); }
Une distinction importante entre les types de valeur et les types de classe est que les instances de type classe, contrairement aux instances de type de valeur, ne peuvent être apportées qu'en appelant un constructeur et ne seront pas exposés au monde extérieur jusqu'à ce que le constructeur soit terminé. ou expose explicitement l'objet en construction. En revanche, les instances de type de valeur seront apportées à l'existence de la création d'une instance de struct ou de type de classe enfermante avec un champ de type de valeur ou par la création d'un tableau d'éléments de type valeur. Bien qu'il n'y aurait pas de raison technique pour laquelle Microsoft n'aurait pas pu définir des constructeurs sans paramètres explicites pour être définis pour les structures, il aurait été difficile de garantir que chaque structure disposera de son constructeur sans paramétrole avant d'être exposé au monde extérieur, et cela aurait été déroutant d'avoir un tel constructeur gérer dans certaines situations mais pas d'autres. P>
Avez-vous examiné le code à l'aide du réflecteur?
Non, je n'ai pas de code spécifique pour regarder comme telle, je basse la question sur quelque chose que j'ai lu
Par intérêt, où l'avez-vous lu? Je sais que c'est quelque chose que j'ai souligné plusieurs fois, mais je n'ai pas vu beaucoup d'autres personnes le mentionnent.
@Jon, je l'ai lu en fait dans votre livre - je ne voulais pas citer le livre directement parce que je pensais que cela pourrait influencer les réponses à la question ... comme si la dernière investissement de Warren Buffet est publiée, le stock tire immédiatement UP en valeur! J'espère que ça ne vous dérange pas.
Pas un problème du tout. J'étais juste curieux :)