c#事宜應用示例詳解。本站提示廣大學習愛好者:(c#事宜應用示例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是c#事宜應用示例詳解正文
事宜:假如類型界說了事宜成員,那末類型便可以告訴其他對象產生了特定的工作。例如,Button類供給了一個名為Click的事宜。運用法式中的一個或許多個對象能夠想吸收關於這個事宜的告訴,以便在Button被點擊後采用操作。
上面我們應用一個例子來加深我們對事宜的懂得:假定如今要設計一個電子郵件運用法式,電子郵件達到時,用戶能夠願望將該郵件轉發給傳真機或其他裝備。構建這個運用法式時,先設計一個MailManager的類型,他擔任吸收傳入的電子郵件,MailManager類型頒布一個NewMail的事宜。其他類型,如Fax和Pager對象可掛號對它們對這個事宜的存眷。
上面上代碼:
第一步:界說類型來包容一切須要發送給事宜告訴吸收者的附加信息
internal class NewMailEventArgs : EventArgs{
private readonly String m_from,m_to,m_subject;
Public NewMailEventArgs(string from,string to,string subject){
m_from=from;m_to=to;m_subject=subject;
}
public string From{get{return m_from;}}
Public string To{get{return m_to;}}
Public string Subject{get{return m_subject;}}
}
注:EventArgs只是一個讓其他類型繼續的基類型。很多事宜都沒有附加的信息要傳遞,但在我們的場景中須要傳遞郵件信息,就結構NewMailEventArgs。
第二步:界說事宜成員
internal class MailManager{
public event EventHandler<NewMailEventArgs> NewMail;
}
注:NewMail是這個事宜的稱號。事宜成員的類型是EventHandler<NewMailEventArgs>,所以辦法原型必需具有以下情勢:
void MethodName(Object sender,NewMailEventArgs e);
第三步:界說擔任激發事宜的辦法來告訴事宜的掛號對象
internal class MailManager{
protected virtual void OnNewMail(NewMailEventArgs e){
//出於線程平安斟酌,如今將拜托字段的援用復制到一個暫時字段中
EventHandler<NewMailEventArgs> temp = Interlocked.CompareExchange(ref NewMail,null,null);
//任何辦法掛號了對事宜的存眷,就告訴他們
if(temp!=null) temp(this,e);
}
}
第四步:界說辦法將輸出轉化為希冀事宜
internal class MailManager{
public void SimulateNewMail(string from,string to,string subject){
NewMailEventArgs e = new NewMailEventArgs(from,to,subject);
OnNewMail(e);
}
}
設計偵聽事宜類型,上面我們應用Fax類型來應用事宜,上代碼
internal sealed Class Fax{
public Fax(MailManager mm){
mm.NewMail += FaxMsg;
}
//新的電子郵件達到時,MailManager將挪用這個辦法
Private Void FaxMsg(object sender,NewMailEventArgs e){
Console.WriteLine("事宜觸發");
}
//履行這個辦法,Fax對象將向NewMail事宜刊出本身對它的存眷
Public Void Unregister(MailManager mm){
mm.NewMail -= FaxMsg;
}
}
注:C#編譯器會將+=操作符翻譯成以下代碼來添加對象對事宜的存眷:
mm.add_NewMail(new EventHandler<NewMailEventArgs>(this.FaxMsg));
如許我們的例子就完成了,當有新的郵件收到時就會觸發對郵件類事宜存眷的一切辦法,即例子中的Fax中的FaxMsg辦法。例子須要對年夜家懂得事宜有所贊助。