C#中事件的主要目的

Tar*_*rik 12 c# events delegates

我一直在研究我的一本c#书,我刚刚看到一篇关于C#事件的句子:
 事件的主要目的是防止用户互相干扰.

无论它意味着什么,是的,事实上事件的工作方式非常像代表.
我一直想知道为什么我应该使用事件代替代表.

那么有没有人可以解释大胆的部分?

提前致谢.

Jon*_*eet 14

选择不是真的在代表和事件之间 - 它们是完全不同的东西.但是,您可以公开具有委托类型的公共属性或公共字段.我认为这就是你的意思.

假设Button.Click是公共领域或财产而不是事件.然后,一段代码可以订阅一个事件,然后另一段代码可以编写:

// Invalid with events, valid with properties
button.Click = null;
Run Code Online (Sandbox Code Playgroud)

从而擦除原始事件处理程序.同样,其他代码也可以调用事件处理程序:

// Invalid with events, valid with properties
button.Click(this, EventArgs.Empty);
Run Code Online (Sandbox Code Playgroud)

即使按钮没有被点击.这显然违反了封装.暴露Click给其他代码的唯一原因是允许他们注册对按钮点击的兴趣并在以后注册不感兴趣 - 这些正是事件提供的能力.

将事件视为围绕两种方法的语法糖.例如,如果我们没有事件那么Button可能会:

public void AddClickHandler(EventHandler handler)
public void RemoveClickHandler(EventHandler handler)
Run Code Online (Sandbox Code Playgroud)

封装的违反消失了,但是你失去了一些便利 - 每个人都必须自己编写类似的方法.事件基本上简化了这种模式.


Kyl*_*ndo 10

事件只能由定义它的类调用,而委托可以从有权访问它的任何人调用.这就是我认为粗体文本的含义.

此外,可以在接口中定义事件,而委托则不能(因为您将委托声明为字段).

我建议给这个链接一个读取,因为它很好地解释了它,除了上面提到的以外还有一些例子.