面试官可能会寻找的关键词是封装。
事件只应向潜在订阅者公开订阅和取消订阅操作。调用实际上是暴露事件的类的责任。
还要注意,public event EventHandler FooBar;
是下面语法的缩写:
private EventHandler _fooBar;
public event EventHandler FooBar
{
add
{
_fooBar = (EventHandler)Delegate.Combine(_fooBar, value);
}
remove
{
_fooBar = (EventHandler)Delegate.Remove(_fooBar, value);
}
}
private
以外的任何其他内容。如果您希望将与事件相关联的委托或委托可访问到子类,则需要使用类似Brandon Cuff所示的形式(尽管可能要使用Interlocked.CompareExchange
进行保护)。
EventName(Params)
不应该直接调用委托--它应该包括适当的空值检查逻辑,因为在没有订阅者的情况下引发事件是完全合法的事情)。 - supercat