Начиная с следующей ситуации:
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 для освобождения ресурсов. Вы можете решить это двумя способами:
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 для очистки. В обоих случаях может быть еще несколько плюсов/минусов... почему вы предлагаете использовать один способ, предпочтительный для другого?