0

オブジェクトがスコープから外れているように見えても、他のクラスがまだそのオブジェクトへの参照を保持しているため、ガベージコレクションが存続する可能性がある場合に、ガベージコレクションについて質問があります。以下のコードをご覧ください。ありがとう。

Public Class MainForm

    Private Sub Work
         Dim Obj1 as New DataTable
         Dim Obj2 as New DataTable

         Helper.TestMethod1(Obj1)
         Helper.TestMethod2(Obj2)
    End Sub

End Class

Public Class Helper

     Private Shared Obj1Reference as Object

     Public Shared Sub TestMethod1 (ByVal obj1Ref as Object)
         Obj1Reference = obj1Ref
     End Sub

     Public Shared Sub TestMethod2 (ByVal obj2Ref as Object)
          'Do Something with obj2Ref
     End Sub

End Class

Workメソッドが終了した後、Obj1とObj2の両方がガベージコレクションキューに入れられますか。私の理解では、静的ヘルパークラスがObj1への参照を保持しているため、Obj2はキューに入れられますが、Obj1には入れられません。私が間違っている場合は訂正してください。

4

2 に答える 2

0

どちらのオブジェクトも初期化されておらず、したがって両方であるため、何も収集されませんNothing。それらが初期化された場合、はい、一方はそれへの参照を持ち続けるので存在し続け、もう一方はそれへの参照を持たないので存在しません。

于 2012-08-03T18:49:35.690 に答える
0

参照によって変数を渡すと、別のメソッドにアドレスが渡され、別の変数(Obj1Reference)が渡されたアドレスを指し、実装されたとおりに操作を行います。

したがって、アプリケーションの実行が終了すると、ガベージコレクターはobj1、obj2をクリーンアップすると思います。

于 2012-08-03T20:28:35.407 に答える