次のコードを使用したクラス「ポートフォリオ」(フィールドの1つとしてクラス「ストック」を持つ)メソッドがあります:
For i = 1 To n
Dim TempStock As New Stock
TempStock.Set_Stock 'sets TempStock
...
Next i
「Stock」は、そのような構造、コンストラクタ、およびデストラクタを持つ私のユーザー定義クラスです。
Private StockName As String
Private CurDate As Date
Private BidPrice As Double
Private AskPrice As Double
Private StockDivs As Dictionary
Private Sub Class_Initialize()
Set StockDivs = New Dictionary
End Sub
Private Sub Class_Terminate()
Set StockDivs = Nothing
End Sub
すべてのループで、空のフィールドを持つ新しい一時オブジェクトを宣言して初期化することを意味しました。しかし、プログラムを段階的に実行した後、ループの最後で Class_Terminate() が呼び出されないように思えます。次のステップでは、すべてのフィールドがTempStock
前のループと同じように設定されています。だから、私は次のことを理解していません:
Class_Terminate()
1)で呼び出されないのはなぜNext i
ですか? いつ呼び出されますか?それは今正しく書かれていますか?または、オブジェクト以外のすべてのフィールドを null 値に設定するコードも作成する必要がありますか?
2) わかりました、呼び出されていませんが、まだありDim TempStock As New Stock
ますか? それは私に二重宣言違反を与えるべきではありませんか?またはTempStock
、少なくとも新しい空のオブジェクトに設定しますか?
3) 次の違いは何ですか:
Dim TempStock As New Stock
と:
Dim TempStock As Stock
Set TempStock = New Stock
それは私の問題に関係していますか?
私の問題のどの部分でも助けていただければ幸いです、ありがとう!