11

構造体を宣言した場合:

struct EmptyResult
{
}

インスタンスにタイプの変数を作成すると、どのような結果になりEmptyResultますか?

public Foo()
{
    EmptyResult result;
}

スタックへの割り当てを期待しますか、それとも事実上ノーオペレーションですか?

4

4 に答える 4

9

C# コンパイラは、空の構造体のサイズを 1 バイトに強制します。これは、逆コンパイラで構造体を見ればわかります。

[StructLayout(LayoutKind.Sequential, Size=1)]
private struct EmptyResult
{
}

System.Byteしたがって、クラスまたはスタック上のその構造体のインスタンスは、またはのインスタンスとまったく同じように 1 バイトを占有します。System.SByte

于 2013-06-06T15:27:42.333 に答える
3

フィールドのない AC# 構造体のサイズは 1 のままです。これは、コンパイラが&アンセーフ コードで演算子を使用して構造体のアドレスを取得できる必要があるためです。

構造体型が型とまったく同じように扱われることを期待していますbyte

于 2013-06-06T15:46:37.110 に答える
1

非参照型の仕組みに沿ったスタック割り当てだと思います。

于 2013-06-06T15:24:16.800 に答える