方法完成后,在方法中创建的控件会发生什么?

时间:2010-01-27 23:26:24

标签: c# winforms

例如在此代码中:

void ButtonCreator()
{
    Button elboton = new Button();
}

调用此方法后elboton会发生什么?

4 个答案:

答案 0 :(得分:5)

如果它们没有被其他对象(例如容器)引用,则它们变得无法访问并且有资格被垃圾收集器收集。这与创建任何其他对象相同。

请注意,System.Windows.Forms.Control类(及其子类,如Button)都实现了IDisposable接口,因此最简单的方法是确保所有非托管资源与Button相关联的是使用using块,如下所示:

using(Button elboton = new Button()) {
    // Do whatever you need to do
}
// elboton is now disposed

但是,无论您是否使用using阻止,在GC运行之前,不会回收与该对象关联的任何托管资源。

答案 1 :(得分:0)

对它的所有引用都被破坏,反过来垃圾收集器最终会吞噬它。如果您将该按钮指定为存在于某个其他上下文中(添加一个超出此方法范围的引用),它将保留。

答案 2 :(得分:0)

该实例将没有参考,一段时间后GC将清理它......

答案 3 :(得分:0)

在您的示例中,当下一次GC迭代开始时,GC(垃圾收集器)将收集elboton。这是因为在ButtonCreator()完成后它没有被引用。