event关键字的真正作用是什么
本文关键字:作用 是什么 关键字 event | 更新日期: 2023-09-27 17:58:27
public delegate void SecondChangedHandler(
object clock,
TimeInfoEventArgs timeInformation);
public event SecondChangedHandler SecondChanged;
我根据这篇文章写了一个时钟。现在,如果我删除event关键字,我会得到相同的结果,那么event到底做了什么?
它的编译方式不同。它让人无法进行
mySecondChangedHandler.SecondChanged = SomeMethod(...); //overwrite
mySecondChangedHandler.SecondChanged(...); //invoke
但只有
mySecondChangedHandler.SecondChanged += SomeMethod(...);
mySecondChangedHandler.SecondChanged -= SomeMethod(...);
event
关键字创建一个私有委托字段,以及一对名为add_EventName
和remove_EventName
的公共事件访问器。(详细信息(
这意味着在类中写入EventName
将返回委托实例,从而允许您调用或检查事件处理程序。
在类之外,EventName
并不真正存在;您所能做的就是编写EventName += something
和EventName -= something
,编译器会将其转换为对访问器的调用。(像一处房产(
有关更多详细信息,请参阅本系列博客文章。
event关键字做两件事
- 它提供了权限。只有类可以引发事件,但是任何外部方法都可以调用原始委托
- 它提供了可供设计者等使用的元数据
event
关键字表示只有承载SecondChanged字段的实例上的方法才能调用它。外部尝试将失败。
在您的案例中,您正在创建一个"类似字段的事件"。编译器在后台进行委托,并允许您订阅和取消订阅它的调用列表。这意味着您拥有委托的所有功能,但您正在限制访问,以便外部世界可以"处理"事件,但不能引发事件(调用委托(。 然而,您也可以显式地为事件创建自己的访问器,这些访问器可以做其他事情(尽管除非有充分的理由,否则通常不建议这样做(。event
关键字为委托创建一对访问器。这实际上是两种方法(add
和remove
(,当订阅或取消订阅
引用C#语言中关于关键字event
,
事件是一种特殊类型的多播委托,只能从声明它们的类或结构(发布者类(中调用。