Das .NET IDisposable-Muster impliziert , dass Ihr Finalizer Dispose explizit aufrufen muss, wenn Sie einen Finalizer schreiben und IDisposable implementieren. Dies ist logisch und das habe ich immer in den seltenen Situationen getan, in denen ein Finalizer erforderlich ist.
Was passiert jedoch, wenn ich dies einfach mache:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
und implementieren Sie keinen Finalizer oder so. Wird das Framework die Dispose-Methode für mich aufrufen?
Ja, mir ist klar, dass dies dumm klingt, und jede Logik impliziert, dass dies nicht der Fall ist, aber ich hatte immer zwei Dinge im Hinterkopf, die mich unsicher gemacht haben.
Jemand hat mir vor ein paar Jahren einmal gesagt, dass dies tatsächlich der Fall sein würde, und diese Person hatte eine sehr solide Erfolgsbilanz darin, "ihre Sachen zu kennen".
Der Compiler / das Framework führt andere "magische" Dinge aus, je nachdem, welche Schnittstellen Sie implementieren (z. B. foreach, Erweiterungsmethoden, Serialisierung basierend auf Attributen usw.). Daher ist es sinnvoll, dass dies auch "magisch" ist.
Obwohl ich viel darüber gelesen habe und viele Dinge impliziert wurden, konnte ich auf diese Frage nie eine endgültige Ja- oder Nein-Antwort finden.