他のすべてのクラスを作成したいと考えています。 はこれまで使用できましたが、そのメソッドを必要とする各クラスで各インスタンスを作成します。vbaで共通/共用インスタンスを作成する方法
他のクラスには1つのインスタンスしか作成できない方法がありますか。
通常私は他の人に見られるような静的変数を作成することができました。 しかし、VBAでは不可能と思われます。/
他のすべてのクラスを作成したいと考えています。 はこれまで使用できましたが、そのメソッドを必要とする各クラスで各インスタンスを作成します。vbaで共通/共用インスタンスを作成する方法
他のクラスには1つのインスタンスしか作成できない方法がありますか。
通常私は他の人に見られるような静的変数を作成することができました。 しかし、VBAでは不可能と思われます。/
モジュール内でサブまたは関数を作成すると、他のクラスからアクセスすることができます。モジュール内の
ModuleName.MethodName
:
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
それはSingletonパターンのVB(A)の実装です。それが本当に適切かどうかを慎重に検討する必要があります。もしそうなら、それがそれを行う方法です。私はそれを使用するとき、私は通常、モジュール内に上記のコードを入れます(ただし、アプリケーションで複数のシングルトンを使用している場合は、それらをすべて1つのモジュールにまとめます)。あなたは、同じモジュールに破壊ルーチンを追加し、アプリケーションの終了からそれを呼び出すことができます。
Public Sub CloseSingleton()
Set objSharedClass = Nothing
End Sub
それとも、ただアプリを閉じたときに、それはスコープの外に手放すことができます - として整頓ませんが、私は決してきませんそれは問題を引き起こすのを見ました(私は通常、クリーンアップを行います...)。
EDIT
使い方(念のため、それは明らかではありません)。次のいずれかの
...
Set objLocalCopy = GetShared
DoSomethingWith objLocalCopy.MethodOrProperty
...
または:
...
DoSomethingWith GetShared.MethodOrProperty
...
あなたは、呼び出し元のルーチンで何度も共有クラス以上を使用するつもりなら最初は好ましいが、第二は、単一の呼び出しのために正常に動作します。
++とそれは簡単です:) –