VB.Net对象超出范围?

时间:2015-05-15 18:14:18

标签: vb.net

这扩展了去年提出的一个问题。

Public Class RandomClassManager
    Private mCol As Collection

    Private Sub Foo()
        Dim ob as New MyRandomClass
        Add(ob)
    End Sub

    Public Sub Add(ByRef mc As MyRandomClass)
        mCol.Add(mc)
    End Sub
End Class

退出Foo后,我是否可以相信mCol还有MyRandomClass个对象?或者我是否有垃圾收集器删除这些对象的风险?

1 个答案:

答案 0 :(得分:4)

是的,您可以相信新创建的MyRandomClass对象仍在mCol中。一旦列表具有对该对象的强引用,垃圾收集器就不会销毁它。或者至少没有东西仍然引用mCol,那就是......垃圾收集器不会销毁任何其他对象强引用的对象。

对于它的价值,如果您确实希望允许垃圾收集器销毁对象,即使它们仍然在列表中,您也可以将它们包装在WeakReference个对象中。