c# - 代表和活动

1 c#-4.0

可能重复:
事件和代理及其各自的应用程序之间的差异

嗨,

我是新来的,我想知道代表和事件使用之间的区别是什么?如何选择使用哪一个?

谢谢!

Ash*_*Ash 9

如果您正在编写一个公开事件的类,那么使用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.

删除事件前缀,代理仍然可以像事件一样使用,但也可能被客户"误导".

事件修饰符实际上只是进一步阐明类的客户意图和限制访问(封装)的一种方式.