Info Form in einem Objekt

jccTeq

Erfahrenes Mitglied
Hallo,

also ich möchte einer Klasse ein Formular mitgeben, das diese als Informations-Fenster verwenden kann. Genauer gesagt lege ich ein Formular an, jedes Mal, wenn der Constructor dieser Klasse aufgrufen wird. Somit hat jedes Objekt dieser Klasse sein eigenes Informationsfenster.

Okay, so weit, so gut.

Jetzt möchte ich aber, daß dieses Fenster wieder zerstört wird, sobald das Objekt nicht mehr verwendet wird, sprich, wenn die Instanz mit einem new() auf dem selben Namen überschrieben wird. Gibt es da Möglichkeiten?


Ach so, das ganze in C# bitte! Danke!
 
Die Instanz wird ja nie überschrieben. Wenn dann wird eine neue angelegt.

Wenn du ein Objekt nicht mehr verwendest, wird es ohnehin vom Garbage-Kollektor (GC) zerstört.

Wäre es ausserdem nicht sinnvoller, nur eine Referenz der Form mitzugeben? Dann gibt es diese Form nur einmal und du verschwendest nicht zuviel Speicherplatz.
 
Und woran merkt das Objekt, daß es vom Garbage Collector zerstört wird? Kann ich da vorher noch Operationen ausführen, wie in C++ im Destructor?
 
Das Objekt merkt das gar nicht, der GC merkt sich das.

Wenn keine Referenz mehr auf das Objekt zeigt, dann wird es - sobald der GC läuft - aus dem Speicher entfernt. Du musst dich darum eigentlich gar nicht kümmern. D.h. aber nicht, dass du jetzt so programmieren sollst, dass du nicht mehr auf deinen Speicherverbrauch schaust.
 
Das ist mir wohl bekannt. Es geht mir darum, daß sobald das Objekt nicht mehr genutzt (sein Name per new() überschrieben) wird (sprich, dem Garbage Collector zum Fraß vorgeworfen wird), bestimmte Methoden seiner Member-Objekte aufgerufen werden. Geht sowas?
 
Es gäbe da den Finalizer, der (glaub ich) aufgerufen wird, wenn der Garbage Collector das Objekt wegräumt. Du definiert ihn, indem du die Methode Finalize() von Object überschreibst (erscheint glaub ich nicht in IntelliSense). Vergiss nicht auch den Finalizer der Basisklasse aufzurufen:
Code:
Protected Overrides Sub Finalize()
    MyBase.Finalize()
    ... dein Code ...
End Sub
So viel VB.NET solltest du als .NET Programmierer verstehen... ;-)
 
Oder auch Destructor genannt ....

Sache ist jedoch die, dass Microsoft davor abrät, den Destructor zu verwenden. Nachzulesen irgendwo in der MSDN.

Die Methode Dispose() aufzurufen wäre ein Möglichkeit, kann aber böse enden. Wenn du ein Objekt nicht mehr brauchst, kannst es einfach auf null setzen, das reicht auch.

Weiters solltest du den GC nicht von Hand anstarten, er startet ohnehin wann er will ;)
 
Zurück