IDisposable für die Klasse oder Schnittstelle deklarieren?

Ausgehend von der folgenden Situation:

<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>

Die Klasse SampleA sollte die Schnittstelle IDisposable für die Freigabe von Ressourcen implementieren. Sie können dies auf zwei Arten lösen:

1. Fügen Sie der Klasse SampleA die gewünschte Schnittstelle hinzu:

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

2. Fügen Sie es der Schnittstelle ISample hinzu und erzwingen Sie die Implementierung abgeleiteter Klassen:

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

Wenn Sie es in die Schnittstelle einfügen, erzwingen Sie, dass eine Implementierung IDisposable implementiert, auch wenn sie nichts zu entsorgen hat. Andererseits ist klar, dass die konkrete Implementierung einer Schnittstelle einen Dispose / Using-Block erfordert und Sie nicht als IDisposable für die Bereinigung casten müssen. Möglicherweise gibt es in beiden Hinsichten weitere Vor- und Nachteile. Warum würden Sie vorschlagen, die eine gegenüber der anderen vorzuziehen?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage