如果您正在编写一个公开事件的类,那么使用event关键字之间是否存在细微差别.例如,以下代码有效,并允许客户端订阅ExposedAsEvent或ExposedAsDelegate:
public delegate void ExposedEventHandler(object sender, EventArgs e);
public MyClass{
public event ExposedEventHandler ExposedAsEvent;
public ExposedEventHandler ExposedAsDelegate;
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是使用事件修饰符限制客户端可以对委托执行的操作.在这种情况下,客户端无法直接调用委托或将其设置为null.
删除事件前缀,代理仍然可以像事件一样使用,但也可能被客户"误导".
事件修饰符实际上只是进一步阐明类的客户意图和限制访问(封装)的一种方式.