Ho una piccola domanda sulle strutture con il set di attributi LayoutKind.Explicit
. Ho dichiarato il struct
come si può vedere, con un fieldTotal
a 64 bit, che è fieldFirst
i primi 32 byte e fieldSecond
gli ultimi 32 byte. Dopo aver impostato sia fieldfirst
e fieldSecond
a Int32.MaxValue
, mi aspetto che lo fieldTotal
sia Int64.MaxValue
, che in realtà non accade. Perchè è questo? So che C# non supporta veramente i sindacati C++, forse leggerà bene i valori solo quando interope- rano, ma quando proviamo a impostare noi stessi i valori, semplicemente non lo gestiremo molto bene?Come posso simulare un unione C++ in 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();
Inoltre, ciò che Reed e Jared dicono di firmati e non firmati. –