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