次の方法で共有


アンマネージ型 (C# リファレンス)

次のいずれかの型の場合、 型はアンマネージ 型です。

  • sbytebyteshortushortintuintlongulongnintnuintcharfloatdoubledecimal、または bool
  • 任意の列挙型
  • 任意のポインター
  • メンバーがすべてアンマネージ型であるタプル
  • アンマネージド型のフィールドのみを含むユーザー定義 構造体 型。

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# 言語仕様「ポインター型」セクションを参照してください。

こちらも参照ください