VB.Net对象超出范围?

VB.Net对象超出范围?,vb.net,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 Cl

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

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
对象吗?或者我是否面临垃圾收集器删除这些对象的风险?

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


值得一提的是,如果您确实想让垃圾收集器销毁对象,即使它们仍在列表中,您可以将它们包装在对象中。

顺便说一句,您不需要对“mc”参数使用“ByRef”。如果要重新指定“mc”指向另一个MyRandomClass对象,则只需要使用“ByRef”。