1,定义需要发送给事件接收者的附加信息的类
class NewMailEventArgs:EventArgs//第一步:定义一个容纳给事件接受者信息的类。 { public string From { get; } public string To { get; } public string Subject { get; } public NewMailEventArgs(string from,string to,string subject) { this.From = from; this.To = to; this.Subject = subject; } }
2,定义事件成员
class MailManager { public event EventHandler<NewMailEventArgs> NewMail;//首先,这是一个委托方法,原型是void MethodName(Object sender,NewMailEventArgs e) protected virtual void OnNewMail(NewMailEventArgs e) { e.Raise<NewMailEventArgs>(this, ref NewMail); } public void SimulateNewMail(string from,string to ,string subject) { OnNewMail(new NewMailEventArgs(from, to, subject)); } }
- 首先定义了一个事件成员 NewMail 并且,其类型是EventHandler<NewMailEventArgs>,该类型的原型是
void Delegate<T>(object sender,T e);
- 然后,定义一个出发函数来触发事件。OnNewMail(NewMailEventArgs e),该事件,通过 NewMail(this,e) 来触发
上面是一个扩展调用,实际上就是调用 NewMail(this,e);
一个事件,在内部实际上生成了3个构造:
- 一个私有的委托字段
- 一个add_xxx方法
- 一个remove_xxx方法