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 是否都会被放入垃圾回收队列中。据我了解,Obj2 已放入队列,但 Obj1 未放入队列,因为静态助手类持有对 Obj1 的引用。如果我错了,请纠正我。

4

2 回答 2

0

没有收集任何内容,因为您的任何对象都没有被初始化,因此都是Nothing. 如果它们被初始化,那么是的,一个会继续存在,因为它会继续引用它,而另一个不会,因为它不会引用它。

于 2012-08-03T18:49:35.690 回答
0

如果您通过引用传递一个变量,它会将地址传递给另一个方法,其中另一个变量(Obj1Reference)将指向传递的地址并按照实现的方式进行操作。

所以我认为当应用程序完成执行时,垃圾收集器会清理 obj1,obj2

于 2012-08-03T20:28:35.407 回答