作为参数传入的对象 - 垃圾收集.Net

时间:2012-08-03 18:47:19

标签: .net vb.net

我有一个关于垃圾收集的问题,当一个对象看起来已经超出范围但可能仍然活着,因为其他类仍然持有对它的引用。请仔细阅读以下代码。感谢。

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的引用。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

通过引用传递变量,它会将地址传递给另一个方法,其中另一个变量(Obj1Reference)将指向传递的地址并执行操作。

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