通常,您可以只使用类似字段的事件,例如只需声明:
public event EventHandler<MagazineEventArgs> MagazineChangedEvent;
这大致相当于声明一个私有委托字段和订阅它和取消订阅它的访问器:
private EventHandler<MagazineEventArgs> magazineChanged;
public event EventHandler<MagazineEventArgs> MagazineChangedEvent
{
add { magazineChanged += value; }
remove { magazineChanged -= value; }
}
...但类似字段的事件语法提供了更多的线程安全性。该线程安全的确切性质取决于您使用的 C# 版本。从 C# 4 开始,它们比以前更干净了 - 请参阅 Chris Burrows 的博客文章了解更多详细信息(第 1部分、第 2部分、第 3 部分、后记)。
如果您正在做一些不同的事情,您通常只需要自己实现事件 - 例如,将事件订阅链接到不同的底层事件,或者EventHandlerList
用作有效存储各种事件的稀疏订阅的一种方式。
了解事件和普通委托字段的区别很重要——它类似于属性和字段之间的区别,尽管稍微有些细微差别,因为事件只有“订阅和取消订阅”操作,调用者无法提升它们或确定其他订阅者。有关更多信息,请参阅我关于该主题的文章。