你当然可以:
Dictionary<String, Delegate> m_events = new Dictionary<String, Delegate>();
Run Code Online (Sandbox Code Playgroud)
在Jeff Richter的Book CLR中,通过C#,您可以找到EventSet类的完整实现.
(即使您没有该书,也可以从https://www.wintellect.com/wp-content/uploads/2017/09/CLR-via-C-4th-Edition-Code.zip下载示例代码.有问题的课程在"Ch11-1-EventSet.cs"中.)
至于问题是什么,事件是什么:
假设你的班级有这行代码:
public event EventHandler<NewMailEventArgs> NewMail;
Run Code Online (Sandbox Code Playgroud)
那么C#编译器会将上面的行转换为三个结构:
私人代表字段.(就像是:private EventHandler<NewMailEventArgs> NewMail;
一个公共add_Xxx方法(其中Xxx是事件名称),感兴趣的订阅者可以使用该方法向事件注册回调委托.
公共remove_Xxx方法(其中Xxx是事件名称),订阅者可以使用该方法从事件中取消注册.
(所有血腥细节都可以在上述书的第11.2节中找到.)
换句话说,你可以存储在Event集合类中的'thing'只是一个普通的旧委托.
| 归档时间: |
|
| 查看次数: |
3711 次 |
| 最近记录: |