今回は 破棄可能な 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