我有一個關於LayoutKind.Explicit
屬性集的結構的小問題。正如你所看到的,我聲明瞭struct
,其中帶有64位的fieldTotal
,最後32字節是fieldFirst
,前32字節是fieldSecond
。在將fieldfirst
和fieldSecond
設置爲Int32.MaxValue
之後,我希望fieldTotal
爲Int64.MaxValue
,這實際上不會發生。爲什麼是這樣?我知道C#並不真的支持C++聯合,也許它只會在調用時讀取值,但是當我們嘗試自己設置值時,它不會很好地處理它。如何在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();
再加上Reed&Jared對簽名和未簽名的說法。 – 2009-07-21 23:37:18