今天学到事件,看完这一章节感受很困惑书本说的繁琐难明,而后本身在网上看了一些讲解大概地弄懂怎么去定义一个事件、利用方法触发这个事件、利用委托来绑定对事件进行处理的方法。c#
假设有一个类(MailManager)它负责接收电子邮件,MailManager类公开一个NewMail事件,当接收到新的邮件时会触发NewMail事件,形成邮件分发给邮件处理对象(Fax类和Pager类的对象)。this
第一步:定义类型来容纳邮件全部须要发送给邮件处理对象(Fax类和Pager类的对象)的信息;spa
class NewMailEventArgs:EventArgs// { private string from;//邮件发出人 private string to;//邮件收取人 private string subject;//邮件主题 public NewMailEventArgs(string from,string to,string subject) { this.from = from; this.to = to; this.subject = subject; } public string From{get{return from;}} public string To{get{return to ;}} public string Subject{get{return subject;}} }
第二步:定义委托类型code
delegate void MyEventHandler(NewMailEventArgs e);//定义委托类型 //CLR的事件模型是创建在委托的基础上的 //通俗的讲这里定义的委托类型做用在于把事件成员和事件处理方法在在不一样的类中绑定一块儿
第三步:MailManger类定义事件成员对象
class MailManger { public event MyEventHandler NewMail;//建立事件成员 public void OnNewMail(NewMailEventArgs e)//触发事件的方法,收到新邮件 { if (NewMail != null) { NewMail(e); } } }
第四步:Fax类和Pager类中定义事件处理方法
事件
class Fax { public void Mail(NewMailEventArgs e) { Console.WriteLine("邮件发送人:"+e.From+" 收件人"+e.To+" 邮件标题"+e.Subject); Console.WriteLine("Fax邮件正在处理中!!!!!!!"); } } class Pager { public void Mail(NewMailEventArgs e) { Console.WriteLine("邮件发送人:" + e.From + " 收件人" + e.To + " 邮件标题" + e.Subject); Console.WriteLine("Pager邮件正在处理中!!!!!!!"); } }
Fax类和Pager类接收的事件通知信息是同样的,可是它们的处理方法实现能够不一样。get
模拟收到邮件:
string
MailManger mail = new MailManger(); NewMailEventArgs e = new NewMailEventArgs("me","微软","微软人类的但愿!!!");//邮件信息 Fax fax = new Fax(); Pager pager = new Pager(); mail.NewMail += new MyEventHandler(pager.Mail);//绑定事件与事件处理方法 mail.NewMail += new MyEventHandler(fax.Mail); mail.OnNewMail(e);//收到邮件 触发事件 调用事件处理方法