程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#事宜應用示例詳解

c#事宜應用示例詳解

編輯:C#入門知識

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辦法。例子須要對年夜家懂得事宜有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved