Procedura: creare un'unione C/C++ mediante attributi (Guida per programmatori C#)
Aggiornamento: novembre 2007
Gli attributi consentono di personalizzare la modalità di disposizione delle struct nella memoria. È ad esempio possibile creare un'unione in C/C++ mediante gli attributi StructLayout(LayoutKind.Explicit) e FieldOffset.
Esempio
In questo segmento di codice tutti i campi di TestUnion iniziano nella stessa posizione di memoria.
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestUnion
{
[System.Runtime.InteropServices.FieldOffset(0)]
public int i;
[System.Runtime.InteropServices.FieldOffset(0)]
public double d;
[System.Runtime.InteropServices.FieldOffset(0)]
public char c;
[System.Runtime.InteropServices.FieldOffset(0)]
public byte b;
}
Nell'esempio riportato di seguito i campi iniziano in altre posizioni impostate in modo esplicito.
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestExplicit
{
[System.Runtime.InteropServices.FieldOffset(0)]
public long lg;
[System.Runtime.InteropServices.FieldOffset(0)]
public int i1;
[System.Runtime.InteropServices.FieldOffset(4)]
public int i2;
[System.Runtime.InteropServices.FieldOffset(8)]
public double d;
[System.Runtime.InteropServices.FieldOffset(12)]
public char c;
[System.Runtime.InteropServices.FieldOffset(14)]
public byte b;
}
I due campi int, i1 e i2, condividono le stesse posizioni di memoria di lg. Questo tipo di controllo sul layout delle struct è utile quando ci si avvale delle chiamate a basso livello.
Vedere anche
Concetti
Riferimenti
Reflection (Guida per programmatori C#)
Attributi (Guida per programmatori C#)
Utilizzo di attributi (Guida per programmatori C#)
Risolvere le ambiguità sulle destinazioni degli attributi (Guida per programmatori C#)
Creazione di attributi personalizzati (Guida per programmatori C#)
Accesso agli attributi mediante reflection (Guida per programmatori C#)