分享方式:


Unmanaged 型別 (C# 參考)

下列型別均為非受控型別

  • sbytebyteshortushortintuintlongulongnintnuintcharfloatdoubledecimalbool
  • 任何 enum 型別
  • 任何指標型別
  • Tuple 其成員皆為非受控型別
  • 任何只包含非受控型別欄位的使用者定義結構型別。

您可以使用 unmanaged 條件約束指定型別參數是非指標、不可為 Null 的非受控型別。

包含非受控型別欄位的建構結構型別也屬於非受控,如下列範例所示:

using System;

public struct Coords<T>
{
    public T X;
    public T Y;
}

public class UnmanagedTypes
{
    public static void Main()
    {
        DisplaySize<Coords<int>>();
        DisplaySize<Coords<double>>();
    }

    private unsafe static void DisplaySize<T>() where T : unmanaged
    {
        Console.WriteLine($"{typeof(T)} is unmanaged and its size is {sizeof(T)} bytes");
    }
}
// Output:
// Coords`1[System.Int32] is unmanaged and its size is 8 bytes
// Coords`1[System.Double] is unmanaged and its size is 16 bytes

泛型結構可能是非受控和受控建構型別的來源。 上述範例會定義泛型結構 Coords<T>,並呈現非受控建構型別的範例。 受控型別的範例為 Coords<object>。 它屬於受控型別,因為具有 object 受控型別的欄位。 如果您希望所有建構的型別都是非受控型別,請使用泛型結構定義中的 unmanaged 條件約束:

public struct Coords<T> where T : unmanaged
{
    public T X;
    public T Y;
}

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格指標型別

另請參閱