代码之家  ›  专栏  ›  技术社区  ›  Luiscencio

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

  •  1
  • Luiscencio  · 技术社区  · 15 年前

    例如,在本代码中:

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

    发生了什么事 elboton 在我调用这个方法之后?

    4 回复  |  直到 15 年前
        1
  •  5
  •   Daniel Pryden    15 年前

    如果它们没有被其他对象(例如容器)引用,那么它们将变得不可访问,并且可以被垃圾收集器收集。这与创建任何其他对象相同。

    请注意 System.Windows.Forms.Control 类(及其子类 Button )全部执行 IDisposable 接口,所以最简单的方法是确保 非受管的 与相关联的资源 纽扣 释放是要使用 using 阻止,就像这样:

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

    然而,任何 管理 在GC运行之前,不会回收与对象关联的资源,无论是否使用 使用 阻止。

        2
  •  0
  •   Nick Larsen    15 年前

    对它的所有引用都将被销毁,垃圾收集器最终会将其吞没。如果您将该按钮指定为存在于其他上下文中(添加对它的引用,使其最后超出此方法的范围),它将保持不变。

        3
  •  0
  •   Rico    15 年前

    在那个实例上没有引用,它将在一段时间后由GC清除…

        4
  •  0
  •   Igor Korkhov    15 年前

    在你的例子中 elboton 将在下次GC迭代开始时由GC(垃圾收集器)收集。这是因为它不会在buttonCreator()完成后被引用。