事件词典

res*_*sgh 3 c# collections events

在这种情况下,c#中是否有可用于创建列表,哈希集和字典等事件的集合?谢谢.

afr*_*hke 7

你当然可以:

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#编译器会将上面的行转换为三个结构:

  1. 私人代表字段.(就像是:private EventHandler<NewMailEventArgs> NewMail;

  2. 一个公共add_Xxx方法(其中Xxx是事件名称),感兴趣的订阅者可以使用该方法向事件注册回调委托.

  3. 公共remove_Xxx方法(其中Xxx是事件名称),订阅者可以使用该方法从事件中取消注册.

(所有血腥细节都可以在上述书的第11.2节中找到.)

换句话说,你可以存储在Event集合类中的'thing'只是一个普通的旧委托.