Vorgehensweise: Erstellen einer Union in C/C++ mit Attributen (C#)

Mithilfe von Attributen können Sie anpassen, wie Strukturen im Arbeitsspeicher angeordnet werden. Sie können z.B. das erstellen, was als eine Union in C/C++ bekannt ist, indem Sie die mit StructLayout(LayoutKind.Explicit)- und FieldOffset-Attribute verwenden.

Beispiel

In diesem Codesegment beginnen alle Felder von TestUnion an derselben Position im Arbeitsspeicher.

// Add a using directive for System.Runtime.InteropServices.  

       [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;  
       }  

Beispiel

Im Folgenden finden Sie ein weiteres Beispiel, in dem Felder an verschiedenen, explizit festgelegten Orten beginnen.

// Add a using directive for System.Runtime.InteropServices.  

       [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 zwei Ganzzahlfelder i1 und i2 teilen die gleichen Speicheradressen wie lg. Diese Art der Kontrolle über das Strukturlayout ist nützlich, wenn Sie Plattformaufrufe nutzen.

Siehe auch

System.Reflection
Attribute
C#-Programmierhandbuch
Attribute
Reflektion (C#)
Attribute (C#)
Erstellen benutzerdefinierter Attribute (C#)
Accessing Attributes by Using Reflection (C#) (Zugriff auf Attribute mit Reflektion (C#))