rksoftware

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

C# 8 の確認 - 破棄可能な ref 構造体

今回は 破棄可能な ref 構造体 です。

公式はこちら

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

ref 構造体と IDisposable インターフェイス

通常の構造体は IDisposable インターフェイスを実装できます。

struct A : IDisposable
{
    public void Dispose() => throw new NotImplementedException();
}

しかし、ref 構造体はインターフェイスを実装できません。

ref struct B : IDisposable
{
    public void Dispose() => throw new NotImplementedException();
}

エラー CS8343 'B': ref 構造体はインターフェイスを実装できません

ref 構造体でも Dispose したい

ref 構造体では、インターフェイスを実装しなくても void Dispose() メソッドを作るだけで OK となりました。

ref struct C
{
    public void Dispose() => Console.WriteLine("B.Dispose");
}

static void Main(string[] args)
{
    {
        using var c = new C();
        f(c);
    }
    static void f(C c) {; }
}

次のように出力され、Dispose されていることが分かります。

B.Dispose