rksoftware

Visual Studio とか C# とかが好きです

C# 8 の確認 - 構築されたアンマネージド型

今回は 構築されたアンマネージド型 です。

公式はこちら

このブログでの目次?はこちら

C# 7.3 以前

型引数のある型(ジェネリック)構造体はアンマネージ型にできませんでした。

これからは

フィールド全てがアンマネージド型の場合、ジェネリック構造体がアンマネージドになります。

実例

struct MyType<T>
{
    public T Value;
}

static void Main(string[] args)
{
    unsafe
    {
        Console.WriteLine(sizeof(MyType<int>));
        Console.WriteLine(sizeof(MyType<Program>));
    }
}

一つ目の sizeof は型引数が値型 int なので、コンパイルが通ります。
二つ目の sizeof は型引数が参照型 Program なので、コンパイルエラーになります。

エラー CS0208 マネージ型 ('MyType') のアドレスの取得、サイズの取得、またはそのマネージ型へのポインターの宣言が実行できません