2009-03-04 9 views
2

Je suis surpris que je n'arrive pas à initialiser mes champs dans les structures, pourquoi est-ce comme ça? Comme:Pourquoi ne puis-je pas initialiser mes champs dans mes structures?

struct MyStruct 
{ 
    private int a = 90; 
} 

mais c'est une erreur de temps complie. Je ne sais pas pourquoi c'est un problème? Merci de m'expliquer cela.

+0

Dupe de [ce sujet] (http://stackoverflow.com/questions/333829). –

Répondre

1

La raison en est principalement la performance. Considérez ce qui suit,

var a = new MyStruct[1000]; 

Si C# a permis l'initialisation des champs dans une struct alors l'initialisation devrait être effectué 1000 fois, une fois pour chaque élément du tableau. C# voulait éviter ce genre de comportement implicite qui pourrait être trouvé dans d'autres langues.

8

En C#, un struct ne peut pas déclarer un constructeur par défaut.

Le compilateur déplace les instructions d'initialisation vers le constructeur, ce qui ne peut pas se produire avec un struct en C#.

0

C'est pour la performance. Lorsque vous créez une structure avec le constructeur par défaut, tout ce qu'elle fait est d'allouer plusieurs octets sur la pile et les initialise à 0.

1

C'est parce que votre affectation est réellement transformée par le compilateur à faire dans le constructeur par défaut. Mais C# struct s n'ont pas de constructeur par défaut, comme vous pouvez le voir dans le link posté par Kent Boogaart.

Questions connexes