我想创建一个类的实例,所有其他人可以使用到目前为止我在每个类中创建每个实例的方法.
有没有办法可以只创建一个其他类可以看到的实例.
Normaly我可以创建一些其他人可以看到的静态变量.但在VBA中似乎不可能:/
Rol*_*ble 14
在一个模块中:
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
Run Code Online (Sandbox Code Playgroud)
这是Singleton模式的VB(A)实现.您需要仔细考虑它是否真的合适,如果是,那就是这样做的方法.当我使用它时,我通常将上面的代码单独放在一个模块中(除非我在应用程序中使用多个Singleton,我将它们放在一个模块中).您可以将破坏例程添加到同一模块,并从应用程序出口调用它:
Public Sub CloseSingleton()
Set objSharedClass = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
或者,当应用程序关闭时,你可以让它超出范围 - 不是很整洁,但我从来没有看到它导致问题(我通常会清理,但是......).
编辑
用法(以防万一不明显).或者:
...
Set objLocalCopy = GetShared
DoSomethingWith objLocalCopy.MethodOrProperty
...
Run Code Online (Sandbox Code Playgroud)
要么:
...
DoSomethingWith GetShared.MethodOrProperty
...
Run Code Online (Sandbox Code Playgroud)
如果您要在调用例程中多次使用共享类,则第一个是首选,但第二个适用于单个调用.