LayoutKind.Explicit
属性が設定された構造について少し質問があります。struct
ご覧のfieldTotal
とおり、64ビットでfieldFirst
最初の32バイトとfieldSecond
最後の32バイトを宣言しました。との両方fieldfirst
を設定fieldSecond
した後Int32.MaxValue
、私はになると期待fieldTotal
しますがInt64.MaxValue
、実際には起こりません。どうしてこれなの?C#は実際にはC ++共用体をサポートしていないことを知っています。おそらく、相互運用時に値を適切に読み取るだけですが、自分で値を設定しようとすると、実際にはうまく処理されません。
[StructLayout(LayoutKind.Explicit)]
struct STRUCT {
[FieldOffset(0)]
public Int64 fieldTotal;
[FieldOffset(0)]
public Int32 fieldFirst;
[FieldOffset(32)]
public Int32 fieldSecond;
}
STRUCT str = new STRUCT();
str.fieldFirst = Int32.MaxValue;
str.fieldSecond = Int32.MaxValue;
Console.WriteLine(str.fieldTotal); // <----- I'd expect both these values
Console.WriteLine(Int64.MaxValue); // <----- to be the same.
Console.ReadKey();