Frage zu Dispose (GC.SuppressFinalize(this);)
-
Hallo c# Community,
nehmen wir an ich instanziiere ein Objekt eine X-Belibiegen Klasse welche IDisosable implementiert.
Die Dispose Methode ruft
GC.SuppressFinalize(this);
"
So, nun is der GC informiert, das Objekt wenn die Ziet da is zu löschen.
aber ich könnte ja immer noch auf variablen bzw. referenze des Objekt zugreifen, weil es ja nich null ist.
Das ganze is dann wohl nich mehr deterministisch???
hier mal der Code meine Disposable Pattern:
/// <summary> /// Dipsoe Pattern /// </summary> public abstract class Disposable : IDisposable { /// <summary> /// Dipose method /// </summary> public abstract void Dispose(bool disposing); /// <summary> /// Example /// </summary> /// <param name="disposing"></param> //public void Dispose(bool disposing); //{ // if (disposing) // { // // Free other state (managed objects). // } // // Free your own state (unmanaged objects). // // Set large fields to null. //} /// <summary> /// Disposing by User /// </summary> private volatile bool _disposed = false; public void Dispose() { if (!this._disposed) { try { Dispose(true); } finally { this._disposed = true; GC.SuppressFinalize(this); } } } /// <summary> /// Disposing by GC (Finalize) /// </summary> ~Disposable() { // Simply call Dispose(false). Dispose(false); } }
-
Zerstoerer schrieb:
Hallo c# Community,
nehmen wir an ich instanziiere ein Objekt eine X-Belibiegen Klasse welche IDisosable implementiert.
Die Dispose Methode ruft
GC.SuppressFinalize(this);
"
So, nun is der GC informiert, das Objekt wenn die Ziet da is zu löschen.
aber ich könnte ja immer noch auf variablen bzw. referenze des Objekt zugreifen, weil es ja nich null ist.
Das ganze is dann wohl nich mehr deterministisch???
hier mal der Code meine Disposable Pattern:
Es gibt zwei Situationen wann Dispose aufgerufen wird: Entweder automatisch von der GC wenn Sie die Objekte aufräumt oder manuell vom Entwickler wenn er das Objekt nicht mehr braucht.
Im ersten Fall kannst Du auf das Objekt nicht mehr zugreifen weil dieser nur eintreten kann nachdem keine Referenzen mehr vorhanden sind.
Im zweiten Fall ist es ein Programmfehler des Entwicklers wenn er ein Objekt manuell Disposed und danach weiter darauf zugreift.