C# 可以列出一个列表<;T>;在一个形体的生命周期内,它所创建并返回到另一个类的物品在它被破坏后还能存活吗?
我有Windows窗体a和Windows窗体B A创建B并将其显示为模态(对话框) 用户对B执行某些操作,B触发一个事件,其中A 侦听然后关闭(DialogResult=DialogResult.OK;) 在事件过程中,列表返回为 侦听A和A的参数应在其 一生 列表的范围及其指向的对象是 “B类专用” 我的问题是:C# 可以列出一个列表<;T>;在一个形体的生命周期内,它所创建并返回到另一个类的物品在它被破坏后还能存活吗?,c#,.net,garbage-collection,C#,.net,Garbage Collection,我有Windows窗体a和Windows窗体B A创建B并将其显示为模态(对话框) 用户对B执行某些操作,B触发一个事件,其中A 侦听然后关闭(DialogResult=DialogResult.OK;) 在事件过程中,列表返回为 侦听A和A的参数应在其 一生 列表的范围及其指向的对象是 “B类专用” 我的问题是: 处置(关闭)B后,列表会继续存在吗 如果它能存活多久,在什么条件下? (如直到启动GB等) 将变量从一个控制对象传递到另一个控制对象时 控件对象,销毁后如何处理变量 创建它的控件对象
列表
会继续存在吗不要混淆变量的可见性范围和对象的生存期。如果存在对对象的活动引用,则即使原始变量不再在作用域中,它也会继续存在。谁创建了对象或谁拥有引用并不重要 对你来说,这意味着,如果你对一个对象有一个(非空)引用,那么这个对象总是活动的;但是,如果它是一次性对象,则其状态可能不再有效。例如,当一个连接被释放(
connection.Dispose();
)时,该对象仍然存在,可以检查其状态,但该连接变得不可用
垃圾收集器(GC)首先标记所有可访问的对象,然后扫描堆以查看是否存在未标记的对象,即不再以活动引用为目标的对象,并将其清除。事实上,这个过程更复杂,但你可以大致了解
在这里,您可以阅读更多关于
换句话说,别担心。GC工作正常,不会破坏您仍在使用的对象。您能为您的问题添加示例吗?它们并不完全清楚,特别是因为指针在c#中是一个不常见的词。你应该测试一下并找出答案——这是最好的学习方法之一。创建上面描述的情况,看看会发生什么。@CamiloTerevinto-不常见,是的。但技术上是正确的。非常感谢你,奥利弗,现在完全清楚了。