2009-03-04 13 views
2

私は構造体のフィールドを初期化できないのに驚いていますが、それはなぜそうですか? Like:なぜ私の構造体のフィールドを初期化できませんか?

struct MyStruct 
{ 
    private int a = 90; 
} 

しかし、それはcomplie時のエラーです。なぜそれが問題なのか分からないのですか?これを私に説明してください。

+0

[this thread](http://stackoverflow.com/questions/333829)。 –

答えて

1

主にパフォーマンスです。 C#は、次に初期化が一旦アレイ内の各要素に対して、1000倍を行わなければならない構造体のフィールドの初期化を許可されている場合、

var a = new MyStruct[1000]; 

を次のように考えます。 C#は、他の言語で見られるような暗黙的な振る舞いを避けたいと思っていました。

8

C#では、structはデフォルトのコンストラクタを宣言できません。

コンパイラは初期化文をコンストラクタに移動します。これはC#のstructでは発生しません。

0

パフォーマンス用です。デフォルトのコンストラクタで構造体を新規作成すると、スタックに多くのバイトが割り当てられ、0に初期化されます。

1

これは、デフォルトのコンストラクタで実行されるようにコンパイラによって実際に変換されるためです。しかし、C#structにはデフォルトのコンストラクタがありません.Kent Boogaartによって投稿されたlinkに記載されています。

関連する問題