Laden...

Wie genau funktioniert IDispoable?

Erstellt von gelöschtem Konto vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.432 Views
Gelöschter Account
vor 15 Jahren
Wie genau funktioniert IDispoable?

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

Gelöschter Account
vor 15 Jahren

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.

Gelöschter Account
vor 15 Jahren

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

Gelöschter Account
vor 15 Jahren

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.

Gelöschter Account
vor 15 Jahren

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.

Gelöschter Account
vor 15 Jahren

was denkst du macht eine form anders?

ich bin nicht deiner meinung.
wenn das die ausnahme bleibt kann man das schon mal machen. einzelfallentscheidung.

da bin ich und vermutlich die gesamte programmiererwelt anderer meinung.

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Sebastian.Lange,

siehe Dispose implementieren und verwenden

herbivore

Gelöschter Account
vor 15 Jahren

Fesch! 👍 👍 👍 Danke

Vermutlich auch im Namen der "gesamten Programmiererwelt"

Nein ich bin nicht anmaßend.

Gelöschter Account
vor 15 Jahren

Nein ich bin nicht anmaßend.

aber ich. wenn man gegen grundlegene richtlinien verstößt und eklatante fehler bewusst implementiert, dann kann ich das sehr wohl behaupten.

871 Beiträge seit 2005
vor 15 Jahren

Hallo,

weils gut dazu passt.

Grüsse,
Egon

Gelöschter Account
vor 15 Jahren

Danke egrath !

trotzdem nervt mich die garbage collection, meinen müll zu hause bring ich auch alleine runter. :evil:

Gelöschter Account
vor 15 Jahren

Dispose bringt den müll runter und der garbagecollector (also die müllabfuhr) bringt ihn dann in die verbrennungsanlage.

edit: außerdem widersprichst du dir:

Selber aufrufen sucks

S
8.746 Beiträge seit 2005
vor 15 Jahren

trotzdem nervt mich die garbage collection

Wie paßt das zu

Selber aufrufen sucks

?

1.665 Beiträge seit 2006
vor 15 Jahren

Hier wird teilweise mehr Müll geschrieben, als der GC normal wegzuräumen hat..

871 Beiträge seit 2005
vor 15 Jahren

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