共用方式為


HOW TO:使用屬性建立 C/C++ 等位 (C# 程式設計手冊)

更新:2007 年 11 月

經由使用屬性,您可以自訂結構在記憶體中的安排方式。例如,您可以使用 StructLayout(LayoutKind.Explicit) 和 FieldOffset 屬性建立 C/C++ 中的等位。

範例

在這個程式碼區段中,TestUnion 的所有欄位都在記憶體中的同一個位置開始。

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

以下是另一個範例,其中欄位是在不同的明確設定位置開始。

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

i1 和 i2,這兩個 int 欄位共用相同的 lg 記憶體位置。當使用平台引動過程時,此種結構配置的控制項非常有用。

請參閱

概念

C# 程式設計手冊

參考

反映 (C# 程式設計手冊)

屬性 (C# 程式設計手冊)

使用屬性 (C# 程式設計手冊)

明示屬性目標 (C# 程式設計手冊)

建立自訂屬性 (C# 程式設計手冊)

使用反映存取屬性 (C# 程式設計手冊)

System.Reflection

Attribute