VB.Net对象超出范围?

3

这篇文章是去年问过的一个问题的进一步解释。

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 对象吗?还是我的对象有被垃圾回收器移除的风险?


2
顺便提一下,您不需要为您的“mc”参数使用“ByRef”。只有在重新分配“mc”以指向另一个MyRandomClass对象时才需要“ByRef”。 - Dave Doknjas
1个回答

4
是的,你可以相信新创建的MyRandomClass对象仍然在mCol中。一旦列表具有对象的强引用,垃圾回收器将不会销毁它。或者说,只要还有其他东西引用了mCol,垃圾回收器就不会销毁任何一个被其他对象强引用的对象。
值得一提的是,如果你确实想让垃圾回收器销毁这些仍然在列表中的对象,你可以将它们包装在WeakReference对象中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接