Excel VBA Objektkonstruktor und Destruktor
Ich brauche, um einige benutzerdefinierte Objekte in VBA, müssen die aufeinander verweisen und ich habe ein paar Fragen.
Ersten - wie-Objekt-Konstruktoren Arbeit in VBA? Gibt es Konstruktoren?
Zweiten gibt es Destruktoren? Wie funktioniert die VBA behandeln das Ende des Objekt-Lebenszyklus? Wenn ich ein Objekt, das Verweise auf andere (und dies ist Ihre einzige Referenz), dann kann ich Sie zu Nichts und mit ihm getan werden könnte oder dass Arbeitsspeicherverluste?
Diese quasi-OO-Zeug ist nur ein bisschen irritierend.
InformationsquelleAutor der Frage notnot | 2009-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
VBA unterstützt der Klasse Module. Sie haben eine Class_Initialize-Ereignis, das ist der Konstruktor und eine Class_Terminate, ist der Destruktor. Sie können die Eigenschaften und Methoden definieren.
Ich glaube VBA verwendet reference counting " für die Objekt-Lebenszyklus. Das ist, warum Sie sehen, eine Menge Einstellen, was auch immer = Nichts, in dieser Art von code. In deinem Beispiel Fall ich denke, es wird nicht Leck Speicher. Aber Sie müssen vorsichtig sein, von Zirkelbezügen.
InformationsquelleAutor der Antwort Will Rickards
Wenn Sie ein Klassenmodul in VBA, für den Konstruktor, den Sie verwenden können:
Gibt es keine Destruktoren, da VBA Müll gesammelt. So stellen Sie sicher zu bereinigen alle Zirkelbezüge, und Sie sollten es vermeiden, jede mögliche memory leaks.
InformationsquelleAutor der Antwort Colin
Es ist schon eine Weile her, seit ich verwendet habe, aber ich glaube nicht, können Sie übergeben Sie Parameter an die Konstruktoren. Ich glaube, das war eines der Probleme, die ich gestoßen bin, aber ich war in so vielen Fragen, wie thse-Klassen gearbeitet und, wie ich erwartet, dass Sie arbeiten, dass ich kann misremembering.
InformationsquelleAutor der Antwort greg
Gibt es Class_Terminate das ist so ziemlich das gleiche wie Destruktor.
InformationsquelleAutor der Antwort TechnoS
Ich confirme class_initialize und class_terminate.
Können Sie es durch das schreiben dieser Testklasse:
Schreiben und diesen code in ein Modul :
Und dann wirst du sehen, logs im Debug-Fenster. Aber mit diesem test, können wir sehen, dass class_initialize nicht aufgerufen, wenn Sie die Instanz erstellen (mit new), aber nur beim ersten Aufruf einer methode in der Instanz oder einen var-Wert.
Die class_terminate scheint aufgerufen zu werden, am Ende der testModule (Wenn eine Instanz ist maked auf die Thisworkbook-Objekt, kündigen ist "nie" genannt... wohl nur, wenn die Arbeitsmappe geschlossen wird oder wenn Excel geschlossen ist)
InformationsquelleAutor der Antwort Elloco