クラスにIDisposableを実装するインスタンスフィールドがある場合、それを含むクラスはIDisposableを実装し、Disposeメソッド内からDisposeメソッドをフィールド化するクラスを実装します。
public class A : IDisposable
{
public System.Drawing.Font font = new Font("Arial", 10.0f);
public void Dispose()
{
font.Dispose()
}
}
(私はdisposeパターンを正しく実行しなかったことを知っていますが、サンプルコードについては十分に良いはずです)
フィールドが静的フィールドである場合、フィールドのDisposeの呼び出しはどこにあるべきですか?
public class B
{
public static System.Drawing.Font font = new Font("Arial", 10.0f);
}
クラスBにIDisposableを実装させてその呼び出しを行うこともできますfont.Dispose
が、後でB.fontを再度使用すると、問題が発生します。また、静的メソッドにアクセスする場合は、Disposeを呼び出すためだけにインスタンスを作成する必要があることを覚えておく必要があります。
静的なDisposeメソッドを作成することもできますが、その場合、ユーザーはDisposeを呼び出すことを忘れずに、プログラム内で最後のユーザーであることを確認する必要があります。