Compartilhar via


Como: Criar uma união C/C ++ usando atributos (guia de programação translation from VPE for Csharp)

Usando atributos, você pode personalizar como estruturas são dispostas na memória.Por exemplo, você pode criar o que é conhecido sistema autônomo uma união em C/C ++ usando o StructLayout(LayoutKind.Explicit) e FieldOffset atributos.

Exemplo

No segmento de código, todos os campos de TestUnion Iniciar ao mesmo local na memória.

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

Este é outro exemplo em que campos de início em diferentes explicitamente conjunto locais.

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

sistema autônomo dois int campos, i1 e i2, compartilhar sistema autônomo mesmos locais de memória sistema autônomo lg. Esse tipo de controle sobre o layout de struct é útil quando usar invocação de plataforma.

Consulte também

Conceitos

Guia de Programação C#

Referência

Reflexo (guia de programação C#) 

Atributos (guia de programação C#)

Usando atributos (guia de programação translation from VPE for Csharp)

Destinos de atributo disambiguating (guia de programação translation from VPE for Csharp)

Criando atributos personalizados (guia de programação translation from VPE for Csharp)

Acessando atributos com reflexo (C# programação guia)

System.Reflection

Attribute