Sollte "Entsorgen" nur für Typen verwendet werden, die nicht verwaltete Ressourcen enthalten?

Ich hatte kürzlich eine Diskussion mit einem Kollegen über den Wert vonDispose und Typen, die implementierenIDisposable.

Ich denke, dass die Umsetzung von Wert istIDisposable für Typen, die so schnell wie möglich aufräumen sollen,auch wenn keine nicht verwalteten Ressourcen zum Bereinigen vorhanden sind.

Mein Kollege denkt anders; implementierenIDisposable Wenn Sie über keine nicht verwalteten Ressourcen verfügen, ist dies nicht erforderlich, da Ihr Typ letztendlich über eine Müllsammlung verfügt.

Mein Argument war, dass wenn Sie eine ADO.NET-Verbindung hatten, die Sie so schnell wie möglich schließen wollten, dann implementierenIDisposable undusing new MyThingWithAConnection() würde Sinn machen. Mein Kollege antwortete, dass eine ADO.NET-Verbindung im Verborgenen einenicht verwaltete Ressource. Meine Antwort auf seine Antwort war, dassAlles ist letztendlich eine nicht verwaltete Ressource.

Mir ist bewusst, dassEmpfohlenes Einwegmuster wo DuKostenlose verwaltete und nicht verwaltete Ressourcen, wennDispose wird genannt aberGeben Sie nur nicht verwaltete Ressourcen frei, wenn Sie über den Finalizer / Destruktor aufgerufen werden (und haben vor einiger Zeit darüber gebloggt, wie es gehtBenachrichtigen Sie die Verbraucher über die unsachgemäße Verwendung Ihrer IDisposable-Typen)

Meine Frage lautet also: Wenn Sie einen Typ haben, der keine nicht verwalteten Ressourcen enthält, lohnt es sich, ihn zu implementierenIDisposable?

Antworten auf die Frage(15)

Ihre Antwort auf die Frage