我有Windows窗体A和Windows窗体B。
A创建B并将其显示为模态(对话框)。
用户在B上做一些工作,B触发了一个事件,其中A
侦听然后关闭(DialogResult = DialogResult.OK;)
在事件过程中,列表返回为
监听A的参数,并且A在其期间应使用它
一生。
List的范围及其指向的对象是
“私人B级”。
我的问题是:
销毁(关闭)B后,List<x>
会生存吗?
如果能够生存,在什么条件下能生存多长时间?
(例如,直到启动GB等)。
当您将变量从控制对象传递到另一个对象时
控制对象,销毁后如何处理变量
它创建的控制对象?
当您将变量传递给另一个控件时,我们是否应该
复制以确保它不会随着控件的销毁而消失吗?
如果指向该对象的指针仍在使用中,
GB是否仍会销毁失去作用域的对象?
最佳答案
不要混淆变量的可见性范围和对象的生存期。如果存在对对象的有效引用,即使原始变量不在范围内,它也将继续存在。谁创建对象或谁拥有引用都没有关系。
对您来说,这意味着,如果您拥有对对象的(非空)引用,则该对象始终处于活动状态;但是,如果它是一次性对象,则其状态可能不再有效。例如,当已放置连接(connection.Dispose();
)时,对象仍然存在并且可以检查其状态,但是连接变得不可用。
垃圾收集器(GC)首先标记所有可访问的对象,然后扫描堆以查看是否存在未标记的对象(即,不再由活动引用作为目标的对象)并清除它们。实际上,该过程更为复杂,但是您可以大致了解。
在这里,您可以在Fundamentals of Garbage Collection上阅读更多内容。
是。
只要有一个参考,它就会生存。
如果另一个对象引用了它,则不会发生任何事情。
没有。
没有。
换句话说,不用担心。 GC可以很好地完成工作,并且不会破坏您仍在使用的对象。