Tôi có một câu hỏi nhỏ về cấu trúc với tập hợp thuộc tính LayoutKind.Explicit
. Tôi đã tuyên bố số struct
như bạn có thể thấy, với số fieldTotal
có 64 bit, là fieldFirst
32 byte đầu tiên và fieldSecond
32 byte cuối cùng. Sau khi đặt cả hai số fieldfirst
và fieldSecond
thành Int32.MaxValue
, tôi mong đợi fieldTotal
là Int64.MaxValue
, điều thực sự không xảy ra. Tại sao điều này? Tôi biết C# không thực sự hỗ trợ các công đoàn C++, có lẽ nó sẽ chỉ đọc các giá trị tốt khi interoping, nhưng khi chúng ta cố gắng thiết lập các giá trị bản thân nó đơn giản sẽ không xử lý nó thực sự tốt?Làm thế nào tôi có thể mô phỏng một liên minh C++ trong 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();
Cộng với những gì Reed & Jared nói về chữ ký và chưa ký. –