event关键字真的有用吗?

Oll*_*ssN 11 c# events

public delegate void SecondChangedHandler(
        object clock, 
        TimeInfoEventArgs timeInformation);

    public event SecondChangedHandler SecondChanged;
Run Code Online (Sandbox Code Playgroud)

我根据这篇文章写了一个时钟.现在,如果我删除事件关键字,我得到相同的结果,那么事件真正做了什么?

Joe*_*oel 12

它的编译方式不同.它让人无法做到

mySecondChangedHandler.SecondChanged = SomeMethod(...); //overwrite
mySecondChangedHandler.SecondChanged(...); //invoke
Run Code Online (Sandbox Code Playgroud)

但是只有

mySecondChangedHandler.SecondChanged += SomeMethod(...);
mySecondChangedHandler.SecondChanged -= SomeMethod(...);
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 6

event关键字创建了一个私人代表场,以及对公共事件访问称为add_EventNameremove_EventName.(详情)

这意味着EventName在类中写入会返回委托实例,从而允许您调用或检查事件处理程序.

课外,EventName并不存在; 所有你能做的就是写EventName += somethingEventName -= something,编译器将其转换成调用的访问者.(像一个财产)

有关更多详细信息,请参阅此系列博客文章.