質問

クラスモジュールがあるとします 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 のスコープが同じであると仮定すると、オブジェクトがいつ破棄されるかに違いはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top