事件处理程序C#中引用变量的范围

时间:2013-08-12 13:53:37

标签: c# button checkbox event-handling scope

我有一个带有按钮控件的简单表单。单击时,会出现一个选中的复选框。

我是初学者,想知道我的引用变量myCheckbox会发生什么,以及当事件处理程序超出其生命周期时它在堆上指向的复选框对象会发生什么?

如果堆上的复选框对象仍然存在,我是否可以通过指向另一个引用来访问它?

谢谢

我的代码 -

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            CheckBox myCheckbox = new CheckBox();
            myCheckbox.Name = "My Check Box";
            myCheckbox.Checked = true;
            myCheckbox.Location = new Point(500, 150);
            this.Controls.Add(myCheckbox);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

checkBox引用的对象由Controls集合维护,这与事件处理程序的生命周期无关 - 实际上事件处理程序没有“生命周期” - 它是一个单击按钮时触发的常规方法。

另一方面,

mycheckBox被破坏,因为它是一个局部变量。

但是,你可以稍后引用CheckBox对象:

var checkBox = this.Controls[index] as CheckBox

如果从集合中删除CheckBox并且不再引用它,则它有资格进行垃圾回收。