今天學到事件,看完這一章節感受很困惑書本說的繁瑣難明,而後本身在網上看了一些講解大概地弄懂怎麼去定義一個事件、利用方法觸發這個事件、利用委託來綁定對事件進行處理的方法。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);//收到郵件 觸發事件 調用事件處理方法