質問
クラスモジュールがあるとします clsMyClass
オブジェクトをメンバー変数として使用します。この非常に単純なクラスの 2 つの完全な実装を以下に示します。
実装 1:
Dim oObj As New clsObject
実装 2:
Dim oObj As clsObject
Private Sub Class_Initialize()
Set oObj = New clsObject
End Sub
Private Sub Class_Terminate()
Set oObj = Nothing
End Sub
これら 2 つに機能的な違いはありますか?特に、 oObj
同じ?
解決
実装 1 では、clsObject は使用されるまでインスタンス化されません。これが使用されない場合、clsObject.Class_Initialize イベントは発生しません。
実装 2 では、clsMyClass のインスタンス化と同時に clsObject インスタンスが作成されます。clsMyClass が作成されると、 clsObject.Class_Initialize が常に実行されます。
他のヒント
実装 1 で宣言がサブルーチンではなくクラス内にある場合、スコープは両方の例で同じです。
オブジェクト変数は、ガベージ コレクションによってそのオブジェクトへの参照がなくなったと判断されるたびに破棄されます。したがって、2 つの例では、 clsObject のスコープが同じであると仮定すると、オブジェクトがいつ破棄されるかに違いはありません。
所属していません StackOverflow