Comment : créer une union C/C++ à l'aide d'attributs (Guide de programmation C#)

Mise à jour : novembre 2007

L'utilisation d'attributs vous permet de personnaliser la présentation des structures dans la mémoire. Par exemple, vous pouvez créer ce qu'on appelle une union en C/C++ avec les attributs StructLayout(LayoutKind.Explicit) et FieldOffset.

Exemple

Dans ce segment de code, tous les champs de TestUnion commencent au même emplacement dans la mémoire.

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

Le code suivant est un autre exemple dans lequel les champs commencent à des emplacements différents définis de manière explicite.

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

Les deux champs int, i1 et i2, partagent les mêmes emplacements de la mémoire que lg. Ce type de contrôle sur la disposition d'une structure est utile lorsque vous utilisez l'appel de code non managé.

Voir aussi

Concepts

Guide de programmation C#

Référence

Réflexion (Guide de programmation C#)

Attributs (Guide de programmation C#)

Utilisation d'attributs (Guide de programmation C#)

Levée de l'ambiguïté sur les cibles d'attribut (Guide de programmation C#)

Création d'attributs personnalisés (Guide de programmation C#)

Accès à des attributs à l'aide de la réflexion (Guide de programmation C#)

System.Reflection

Attribute