次の状況から開始します。
public interface ISample
{
}
public class SampleA : ISample
{
// has some (unmanaged) resources that needs to be disposed
}
public class SampleB : ISample
{
// has no resources that needs to be disposed
}
クラス SampleA は、リソースを解放するためのインターフェイス IDisposable を実装する必要があります。これは、次の 2 つの方法で解決できます。
1. 必要なインターフェースをクラス SampleA に追加します。
public class SampleA : ISample, IDisposable
{
// has some (unmanaged) resources that needs to be disposed
}
2. これをインターフェイス ISample に追加し、派生クラスに強制的に実装させます。
public interface ISample : IDisposable
{
}
インターフェイスに配置すると、破棄するものがない場合でも、実装に IDisposable の実装を強制します。一方、インターフェイスの具体的な実装には dispose/using ブロックが必要であり、クリーンアップのために IDisposable としてキャストする必要がないことは明らかです。両方の方法でさらにいくつかの長所/短所があるかもしれません...一方の方法を他方よりも優先して使用することをお勧めするのはなぜですか?