Объявить IDisposable для класса или интерфейса?

Начиная со следующей ситуации:

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

45
задан Beachwalker 9 May 2012 в 10:06
поделиться