为什么用事件i声明委托,我没有看到关键字事件的使用?

时间:2012-01-25 15:22:27

标签: c# events delegates

请给我一个简单的例子,为什么我们需要它,如果我们没有在带有委托的例子中使用它会发生什么。 谢谢

1 个答案:

答案 0 :(得分:8)

不确定

// With events...
public class Button
{
    public event EventHandler Click;
}

public void Client
{
    public void Method(Button button)
    {
        // This is all I can do...
        button.Click += SomeHandler;
    }
}


// With plain delegate fields or properties...
public class Button
{
    public EventHandler Click { get; set; }
}

public void Client
{
    public void Method(Button button)
    {
        // Who cares if someone else is already subscribed...
        button.Click = SomeHandler;

        // And let's just raise the event ourselves...
        button.Click(button, EventArgs.Empty);
    }
}

换句话说,对于事件,你有一个发布/子模式的受控实现 - 单独的订阅者不能相互干扰(除非可能在他们的处理程序中抛出异常)并且只有发布者可以“发布”(调用处理程序)。