Gewusst wie: Erstellen einer Union in C/C++ mit Attributen (C#-Programmierhandbuch)
Aktualisiert: November 2007
Durch die Verwendung von Attributen können Sie das Layout von Strukturen im Speicher anpassen. Sie können beispielsweise ein in C/C++ als Union bezeichnetes Element erstellen, indem Sie das StructLayout(LayoutKind.Explicit)-Attribut und das FieldOffset-Attribut verwenden.
Beispiel
In diesem Codesegment beginnen alle Felder von TestUnion an derselben Speicherposition.
[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;
}
Im Folgenden sehen Sie ein Beispiel für Felder, die an anderen, explizit festgelegten Speicherpositionen starten.
[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;
}
Die beiden int-Felder i1 und i2 haben dieselbe Speicherposition wie lg. Diese Kontrolle über das Strukturlayout ist besonders bei Verwendung von Plattformaufrufen hilfreich.
Siehe auch
Konzepte
Referenz
Reflektion (C#-Programmierhandbuch)
Attribute (C#-Programmierhandbuch)
Verwenden von Attributen (C#-Programmierhandbuch)
Auflösen der Mehrdeutigkeit von Attributzielen (C#-Programmierhandbuch)
Erstellen benutzerdefinierter Attribute (C#-Programmierhandbuch)
Zugriff auf Attribute mit Reflektion (C#-Programmierhandbuch)