如果回调被分配给对象两次,事件是否会被执行两次?

时间:2010-02-14 16:41:14

标签: c# java

我有一个代码将事件附加到表单。

this.form.Resize += new EventHandler(form_Resize);

如您所见,这是由+=完成的。 如果上述代码执行了两次或多次,

像这样:

this.form.Resize += new EventHandler(form_Resize);
this.form.Resize += new EventHandler(form_Resize);
this.form.Resize += new EventHandler(form_Resize);
this.form.Resize += new EventHandler(form_Resize);
this.form.Resize += new EventHandler(form_Resize);

多次附加回调方法?

将该方法称为多少次 form_Resize

如果多次将回调方法分配给同一个对象,事件是否会多次执行?

3 个答案:

答案 0 :(得分:6)

每次附加事件处理程序时都会调用一次。 (C#)

为防止双重附件,您可以使用此模式:

this.form.Resize -= new EventHandler(form_Resize); 
this.form.Resize += new EventHandler(form_Resize); 

如果没有附加处理程序,第一个语句不会抛出错误,并且会删除现有的处理程序。

答案 1 :(得分:2)

它将在C#中 - 我不知道Java。您正在向同一方法添加多个委托,并且将依次调用每个委托。

这是一个证明它的简单例子:

using System;

class Example
{
    static event Action Bar;

    static void Main()
    {
        Bar += Foo;
        Bar += Foo;

        Bar();
    }

    static void Foo()
    {
        Console.WriteLine("Foo");
    }
}

答案 2 :(得分:0)

在调用列表中允许重复,所以是的,该方法将被执行多次。至少在C#中。