構造体を宣言した場合:
struct EmptyResult
{
}
インスタンスにタイプの変数を作成すると、どのような結果になりEmptyResult
ますか?
public Foo()
{
EmptyResult result;
}
スタックへの割り当てを期待しますか、それとも事実上ノーオペレーションですか?
C# コンパイラは、空の構造体のサイズを 1 バイトに強制します。これは、逆コンパイラで構造体を見ればわかります。
[StructLayout(LayoutKind.Sequential, Size=1)]
private struct EmptyResult
{
}
System.Byte
したがって、クラスまたはスタック上のその構造体のインスタンスは、またはのインスタンスとまったく同じように 1 バイトを占有します。System.SByte
フィールドのない AC# 構造体のサイズは 1 のままです。これは、コンパイラが&
アンセーフ コードで演算子を使用して構造体のアドレスを取得できる必要があるためです。
構造体型が型とまったく同じように扱われることを期待していますbyte
。
非参照型の仕組みに沿ったスタック割り当てだと思います。