如果我将某个对象的方法链接到委托,然后处理该对象会发生什么?
像这样:
class Hunter
{
public event Action Shoot;
public execute()
{
Form formBabySeal = new Form();
Shoot += formBabySeal.Close;
formBabySeal.Show();
formBabySeal.Close(); //Dispose Form
if (Shoot != null)
{
Shoot(); //event is null?
}
}
}
答案 0 :(得分:1)
formBabySeal
不是null
只是因为你处理它。因此,formBabySeal.Close()
将被调用。
在查看调用的方法时,您的代码与此相同:
Form formBabySeal = new Form();
formBabySeal.Show();
formBabySeal.Close(); //Dispose Form
formBabySeal.Close();
这将关闭表单(第一次调用Close
),第二次调用将不会执行任何操作,因为表单已经关闭。
但是,正如Steve在评论部分指出的那样,您的代码会引入内存泄漏,因为Shoot
仍然保留对Close
formBabySeal
方法的引用,因此只要班级formBabySeal
的实例存活,Hunter
就会保持活着。
答案 1 :(得分:0)