Deklaruj IDisposable dla klasy lub interfejsu?

Począwszy od następującej sytuacji:

<code>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
}
</code>

Klasa SampleA powinna implementować interfejs IDisposable do zwalniania zasobów. Możesz rozwiązać to na dwa sposoby:

1. Dodaj wymagany interfejs do klasy SampleA:

<code>public class SampleA : ISample, IDisposable
{
   // has some (unmanaged) resources that needs to be disposed
}
</code>

2. Dodaj go do interfejsu ISample i wymuś implementację klas pochodnych:

<code>public interface ISample : IDisposable
{
}
</code>

Jeśli umieścisz go w interfejsie, zmusisz każdą implementację do implementacji IDisposable, nawet jeśli nie mają nic do dyspozycji. Z drugiej strony bardzo wyraźnie widać, że konkretna implementacja interfejsu wymaga bloku dispose / using, a do czyszczenia nie trzeba rzucać jako IDisposable. W obu przypadkach może być więcej plusów / minusów ... dlaczego sugerowałbyś użycie jednego z preferowanych sposobów w stosunku do drugiego?

questionAnswers(7)

yourAnswerToTheQuestion