Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以列出一个列表<;T>;在一个形体的生命周期内,它所创建并返回到另一个类的物品在它被破坏后还能存活吗?_C#_.net_Garbage Collection - Fatal编程技术网

C# 可以列出一个列表<;T>;在一个形体的生命周期内,它所创建并返回到另一个类的物品在它被破坏后还能存活吗?

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等) 将变量从一个控制对象传递到另一个控制对象时 控件对象,销毁后如何处理变量 创建它的控件对象

我有Windows窗体a和Windows窗体B

A创建B并将其显示为模态(对话框)

用户对B执行某些操作,B触发一个事件,其中A 侦听然后关闭(DialogResult=DialogResult.OK;)

在事件过程中,列表返回为 侦听A和A的参数应在其 一生

列表的范围及其指向的对象是 “B类专用”

我的问题是:

  • 处置(关闭)B后,
    列表
    会继续存在吗

  • 如果它能存活多久,在什么条件下? (如直到启动GB等)

  • 将变量从一个控制对象传递到另一个控制对象时 控件对象,销毁后如何处理变量 创建它的控件对象的名称

  • 当你把一个变量传递给另一个控件时,我们能得到一个 复制以确保它不会随着控件的破坏而飞走

  • 如果指向对象的指针仍在使用中, GB是否仍会销毁丢失其作用域的对象


  • 不要混淆变量的可见性范围和对象的生存期。如果存在对对象的活动引用,则即使原始变量不再在作用域中,它也会继续存在。谁创建了对象或谁拥有引用并不重要

    对你来说,这意味着,如果你对一个对象有一个(非空)引用,那么这个对象总是活动的;但是,如果它是一次性对象,则其状态可能不再有效。例如,当一个连接被释放(
    connection.Dispose();
    )时,该对象仍然存在,可以检查其状态,但该连接变得不可用

    垃圾收集器(GC)首先标记所有可访问的对象,然后扫描堆以查看是否存在未标记的对象,即不再以活动引用为目标的对象,并将其清除。事实上,这个过程更复杂,但你可以大致了解

    在这里,您可以阅读更多关于

  • 至少只要有一个引用,它就会存在
  • 如果另一个对象引用了它,则不会发生任何事情
  • 没有
  • 没有

  • 换句话说,别担心。GC工作正常,不会破坏您仍在使用的对象。

    您能为您的问题添加示例吗?它们并不完全清楚,特别是因为指针在c#中是一个不常见的词。你应该测试一下并找出答案——这是最好的学习方法之一。创建上面描述的情况,看看会发生什么。@CamiloTerevinto-不常见,是的。但技术上是正确的。非常感谢你,奥利弗,现在完全清楚了。