2010-12-01 26 views
5

Ich möchte eine Instanz der Klasse erstellen, die alle anderen könnte bisher verwenden ich jede Instanz in jeder Klasse erstellen, die ihre Methoden benötigt.So erstellen Sie gemeinsame/gemeinsame Instanz in VBA

Gibt es einen Weg, dass ich nur eine Instanz erstellen könnte, die von anderen Klassen gesehen werden würde.

Normalerweise könnte ich eine Art statische Variable erstellen, die von anderen gesehen werden würde. Aber es scheint nicht möglich, in VBA:/

Antwort

4

Machen Sie das Sub oder die Funktion in einem Modul und Sie können auf es von Ihren anderen Klassen zugreifen.

ModuleName.MethodName 
+0

++ und ja, es ist so einfach :) –

10

In einem Modul:

Private objSharedClass As myClass 

Public Function GetShared() As myClass 

    If objSharedClass Is Nothing Then 
     Set objSharedClass = New myClass 
    End If 

    Set GetShared = objSharedClass 

End Function 

Es ist die VB (A) Umsetzung der Singleton-Muster. Sie müssen sorgfältig überlegen, ob es wirklich angemessen ist, und wenn ja, so ist es die Art und Weise, dies zu tun. Wenn ich es verwende, lege ich normalerweise den obigen Code in ein Modul selbst (außer, wenn ich mehr als einen Singleton in der Anwendung verwende, lege ich sie alle in einem einzigen Modul zusammen). Sie können eine Zerstörung Routine zu dem gleichen Modul hinzufügen und aus Ihrer Anwendung Ausfahrt nennen:

Public Sub CloseSingleton() 

    Set objSharedClass = Nothing 

End Sub 

Oder man kann es nur außerhalb des Gültigkeitsbereiches gehen lassen, wenn die Anwendung geschlossen wird - nicht so ordentlich, aber ich habe noch nie Habe gesehen, dass es ein Problem verursacht (ich räume normalerweise auf, aber ...).

EDIT

Usage (für alle Fälle ist es nicht offensichtlich ist). Entweder:

... 
Set objLocalCopy = GetShared 
DoSomethingWith objLocalCopy.MethodOrProperty 
... 

Oder:

... 
DoSomethingWith GetShared.MethodOrProperty 
... 

Die erste ist vorzuziehen, wenn Sie vorhaben, die gemeinsam genutzte Klasse mehr als einmal in der Aufruf-Routine zu verwenden, aber die zweite arbeitet für einen einzigen Anruf in Ordnung.

Verwandte Themen