本篇介绍事件
实际上事件我使用的比较少,委托用的更多,所以有说的不对的地方,欢迎指正
还是先看看文档吧
事件和委托类似,事件是后期绑定机制。 实际上,事件是建立在对委托的语言支持之上的。
那么事件与委托有什么不同呢?
我们先看看文档中对事件在C#中的设计目的是什么
在事件源和事件接收器之间启用非常小的耦合。 这两个组件可能不会由同一个组织编写,甚至可能会通过完全不同的计划进行更新。
订阅事件并从同一事件取消订阅应该非常简单。
事件源应支持多个事件订阅服务器。 它还应支持不附加任何事件订阅服务器。
我的理解是这样的
委托可以委托他人帮我们完成一件事情
而事件是当我们完成一件事情时通知他人
所以事件有以下特点
+=和-=但不能Invoke)=)举个具体点的栗子
我在CSDN写博客,有人订阅了我
在我发博客的时候,会通知所有订阅我的人,我发了新的博客
别人也不能上我的账号替我发博客
这就是可以被订阅,但不能被外部触发(
截止至写本文的时候,我还只有一个粉丝(惨案。。。)
但是我的博客并不是完全只为了这个粉丝而写的
这就是不可被完全指向
事件声明:
public event EventHandler<FileListArgs> Progress;
EventHandler<FileListArgs> 的类型必须为委托类型
事件调用:
Progress?.Invoke(this, new FileListArgs(file));
订阅:
EventHandler<FileListArgs> onProgress = (sender, eventArgs) =>
Console.WriteLine(eventArgs.FoundFile);
fileLister.Progress += onProgress;
取消订阅
fileLister.Progress -= onProgress;
实际使用中声明事件我习惯使用Action
public event Action<EventArgs> MyEvent;