私は構造体のフィールドを初期化できないのに驚いていますが、それはなぜそうですか? Like:なぜ私の構造体のフィールドを初期化できませんか?
struct MyStruct
{
private int a = 90;
}
しかし、それはcomplie時のエラーです。なぜそれが問題なのか分からないのですか?これを私に説明してください。
私は構造体のフィールドを初期化できないのに驚いていますが、それはなぜそうですか? Like:なぜ私の構造体のフィールドを初期化できませんか?
struct MyStruct
{
private int a = 90;
}
しかし、それはcomplie時のエラーです。なぜそれが問題なのか分からないのですか?これを私に説明してください。
主にパフォーマンスです。 C#は、次に初期化が一旦アレイ内の各要素に対して、1000倍を行わなければならない構造体のフィールドの初期化を許可されている場合、
var a = new MyStruct[1000];
を次のように考えます。 C#は、他の言語で見られるような暗黙的な振る舞いを避けたいと思っていました。
C#では、struct
はデフォルトのコンストラクタを宣言できません。
コンパイラは初期化文をコンストラクタに移動します。これはC#のstruct
では発生しません。
パフォーマンス用です。デフォルトのコンストラクタで構造体を新規作成すると、スタックに多くのバイトが割り当てられ、0に初期化されます。
これは、デフォルトのコンストラクタで実行されるようにコンパイラによって実際に変換されるためです。しかし、C#struct
にはデフォルトのコンストラクタがありません.Kent Boogaartによって投稿されたlinkに記載されています。
[this thread](http://stackoverflow.com/questions/333829)。 –