アンマネージド型 (C# リファレンス)
型は、次のいずれかの型である場合、アンマネージド型です。
sbyte
、byte
、short
、ushort
、int
、uint
、long
、ulong
、nint
、nuint
、char
、float
、double
、decimal
、またはbool
- すべての列挙型
- すべてのポインター 型
- メンバーがすべてアンマネージド型であるタプル
- アンマネージ型のフィールドのみを含むユーザー定義の struct 型。
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# 言語仕様」の「ポインター型」をご覧ください。
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET