Hallo,
Ich benutze .NET 2.0 und leite meine Klasse von IDispoable ab und implentiere
auch die einzige Interface Funktion Dispose.
So wie ich das verstanden habe dient Dispose als eine Art Destruktor Event und
wird irgendwann beim Abräumen meines Objekts aufgerufen.
Passieren tut bei mir leider garnichts.
Habe ich da irgendwas falsch verstanden ?
Gruss
Sebastian
ja. idisposable implementiert man nur dann, wenn man manuell aufräumen muss und das muss man auch noch selbst aufrufen. entweder Using(...) ruft es auf oder du selbst mit .Dispose
destruktor gibt es auch
~klassenname()
{
}
jedoch ist nicht gewährleistet wann er aufgerufen wird und ob noch die objekte die er evtl noch benötigt nicht bereits abgeräumt sind.
Selber aufrufen sucks 😭 Die Forms implementieren Dispose immer über ein override und da ist sichergestellt das die Membervariablen noch da sind beim Aufruf.
Ich kann meine Klasse von Forms ableiten und dann override überschreiben
und der Witz ist das klappt ganz vorzüglich, erscheint mir nur etwas merkwürdig...
naja was denkst du machst du falsch?
eine klasse von forms abzuleiten nur um disposable "automatisch" aufgerufen zu bekommen ist... grauenhaft blauäugig.
wie wäre es den nwenn du im destruktor dispose aufrufst? wenn du keine abhängigkeiten zu objekten hast, die du nciht direkt referenzierst dann ist das schon möglich, wobei ich die anzahl von klassen, die einen destruktor haben kleinhalten würde da das erstellen solch einer klasse in etwa 5 mal so lange dauert und das abräumen geschieht erst beim 2. durchlauf des gc.
ansonsten ist und bleibt das handling mit idisposable das gleiche und das korrekte. du kannst natürlcih auch weiterhin alle deine klassen von form ableiten.. ob sinn oder eher unsinn soll dann der kunde entscheiden.
eine klasse von forms abzuleiten nur um disposable "automatisch" aufgerufen zu bekommen ist... grauenhaft blauäugig.
ich bin nicht deiner meinung.
wenn das die ausnahme bleibt kann man das schon mal machen. einzelfallentscheidung.
im destruktor habe ich keine garantie darauf das die membervariablen meiner klasse noch nicht abgeräumt sind, die ich hier noch brauche. (da nützt es mir auch nix von da aus Dispose aufzurufen) zumindest war das in .NET 1.1 damals so.
wenn sich da inzwischen was geändert hat weiss ich davon nix.
trotzdem nervt mich die garbage collection
Wie paßt das zu
Selber aufrufen sucks
?
Hier wird teilweise mehr Müll geschrieben, als der GC normal wegzuräumen hat..
> Codejunky <
Danke egrath !
trotzdem nervt mich die garbage collection, meinen müll zu hause bring ich auch alleine runter. :evil:
Hallo,
wenn dich ger GC nervt bist Du bei Managed Sprachen eher fehl am Platz.
Grüsse,
Egon
egrath's Blog: http://egonrath.eg.funpic.de/wordpress