+ =带事件的运算符

Mat*_*att 20 c# events

public void Bar()
{
    Foo foo = new Foo();
    **foo.MyEvent += foo_MyEvent;**
    foo.FireEvent();        
}

void foo_MyEvent(object sender, EventArgs e)
{
    ((Foo)sender).MyEvent -= foo_MyEvent;
}
Run Code Online (Sandbox Code Playgroud)

嘿,我对事件有点不熟悉,有人能告诉我+ =运算符对事件的影响吗?

mqp*_*mqp 38

+=订阅活动.将右侧的委托或方法+=添加到事件跟踪的内部列表中,当拥有类触发该事件时,将调用列表中的所有委托.

  • 和` - =`unsubscribes (20认同)

Mar*_*ers 20

你接受的答案是一个很好的简化版本+=,但它不是完整的故事.

+=运营商呼吁事件add方法.同样的-=电话删除.这通常会导致委托被添加到事件触发时调用的内部处理程序列表中,但并非总是如此.

完全可以定义add来做其他事情.此示例可能有助于演示您致电时会发生什么+=:

class Test
{
    public event EventHandler MyEvent
    {
        add
        {
            Console.WriteLine("add operation");
        }

        remove
        {
            Console.WriteLine("remove operation");
        }
    }       

    static void Main()
    {
        Test t = new Test();

        t.MyEvent += new EventHandler (t.DoNothing);
        t.MyEvent -= null;
    }

    void DoNothing (object sender, EventArgs e)
    {
    }
} 
Run Code Online (Sandbox Code Playgroud)

输出:

add operation
remove operation

有关更多信息,请参阅Jon Skeet关于事件和代理人的文章.