IDisposible - Explizierter Aufruf

25/12/2007 - 11:39 von Karsten Sosna | Report spam
Hallo NG,
wenn ich von eine Klasse ableite die IDisposible implementiert, muß die
abgeleitete Klasse dann auch IDisposible implementieren um die Basisklasse
zu disposen? Eigentlich doch nicht solange die abgeleitete Klasse keine
unverwalteten Resourcen benutzt. Und auch wenn sie das tut muss ich doch
nicht MyBase.Dipose aufrufen, oder sehe ich das falsch?

Danke für jeden Tipp.
Gruß Scotty

Noch 1/2 Tage, dann geht endlich der Weihnachtsumtausch los. Und auch die
"Fresserei" und der Verwandtenbesuch hat ein Ende. ;=)
 

Lesen sie die antworten

#1 Peter Fleischer
27/12/2007 - 08:35 | Warnen spam
"Karsten Sosna" schrieb im Newsbeitrag
news:
Hallo NG,
wenn ich von eine Klasse ableite die IDisposible implementiert, muß die
abgeleitete Klasse dann auch IDisposible implementieren um die Basisklasse
zu disposen?



Hi Karsten,
in diesem Satz ist ein Denk- oder Formulierungsfehler. Ein Klasse wird nicht
dipose't. Die Dispose-Methode, wie auch jede andere Methode, bezieht sich
nicht auf die Klasse, sondern auf das Objekt. D.h., es ist Programmcode, der
im Speicher nur einmal vorhanden ist und für jedes Objekt resp. die
Ressource, die dieses Objekt im Speicher hàlt, angewandt werden kann.

Da eine Klasse IMMER die Menge an Programmcode ist, die sich aus der
Vererbungshierarchie ergibt, kann eine Basisklasse nicht dispose't werden.
Für ein Objekt vom Typ einer abgeleiteten Klasse kann die Dispose-Methode
aufgerufen, wenn die Methode in der Vererbungshierarchie in einer der
Basisklassen definiert ist. Die Dispose-Methode führt dann das aus, was sich
aus dem Überschreiben bzw. Überschatten an auszuführenden Programmcode
ergibt.

Eigentlich doch nicht solange die abgeleitete Klasse keine unverwalteten
Resourcen benutzt.



Das Eine (Dispose) hat mit dem Anderen (unverwaltete Ressourcen) erst einmal
überhaupt nichts zu tun. Dispose kann auch sinnvoll bei verwalteten
Ressourcen sein.

Wenn Dispose für die Bearbeitung unverwalteter Ressourcen in der Basisklasse
genutzt wird, in der abgeleiteten Klasse aber keine unverwalteten Ressourcen
genutzt werden, kann Dispose überschrieben oder überschattet werden, um eine
Dispose-Methode zu bekommen, die keine verwalteten Ressourcen anspricht und
ggf. überhaupt nichts macht außer bespielsweise SuppressFinalize.

Und auch wenn sie das tut muss ich doch nicht MyBase.Dipose aufrufen, oder
sehe ich das falsch?



MyBase.Dispose braucht nur aufgerufen werden, wenn auch Programmcode aus der
Basisklasse auszuführen ist. Die Logik muss dann natürlich passen, z.B. der
Zugriff auf die Verweise auf die unverwalteten Ressourcen.


Viele Gruesse

Peter

Ähnliche fragen