最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#事件使用示例詳解

 更新時間:2014年04月09日 11:58:45   作者:  
這篇文章主要介紹了c#事件使用方法,下面我們利用一個例子來加深我們對事件的理解,需要的朋友可以參考下

事件:如果類型定義了事件成員,那么類型就可以通知其他對象發(fā)生了特定的事情。例如,Button類提供了一個名為Click的事件。應用程序中的一個或者多個對象可能想接收關(guān)于這個事件的通知,以便在Button被點擊后采取操作。

下面我們利用一個例子來加深我們對事件的理解:假定現(xiàn)在要設計一個電子郵件應用程序,電子郵件到達時,用戶可能希望將該郵件轉(zhuǎn)發(fā)給傳真機或其他設備。構(gòu)建這個應用程序時,先設計一個MailManager的類型,他負責接收傳入的電子郵件,MailManager類型公布一個NewMail的事件。其他類型,如Fax和Pager對象可登記對它們對這個事件的關(guān)注。

下面上代碼:

第一步:定義類型來容納所有需要發(fā)送給事件通知接收者的附加信息

復制代碼 代碼如下:

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只是一個讓其他類型繼承的基類型。許多事件都沒有附加的信息要傳遞,但在我們的場景中需要傳遞郵件信息,就構(gòu)造NewMailEventArgs。

第二步:定義事件成員

復制代碼 代碼如下:

internal class MailManager{
    public event EventHandler<NewMailEventArgs> NewMail;
}
注:NewMail是這個事件的名稱。事件成員的類型是EventHandler<NewMailEventArgs>,所以方法原型必須具有以下形式:

void MethodName(Object sender,NewMailEventArgs e);

第三步:定義負責引發(fā)事件的方法來通知事件的登記對象

復制代碼 代碼如下:

internal class MailManager{
    protected virtual void OnNewMail(NewMailEventArgs e){
     //出于線程安全考慮,現(xiàn)在將委托字段的引用復制到一個臨時字段中
       EventHandler<NewMailEventArgs> temp = Interlocked.CompareExchange(ref NewMail,null,null);
       //任何方法登記了對事件的關(guān)注,就通知他們
       if(temp!=null) temp(this,e); 
  }
}

第四步:定義方法將輸入轉(zhuǎn)化為期望事件

復制代碼 代碼如下:

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將調(diào)用這個方法
   Private Void FaxMsg(object sender,NewMailEventArgs e){
        Console.WriteLine("事件觸發(fā)");
    }
   //執(zhí)行這個方法,F(xiàn)ax對象將向NewMail事件注銷自己對它的關(guān)注
  Public Void Unregister(MailManager mm){
        mm.NewMail -= FaxMsg;
    }
}

注:C#編譯器會將+=操作符翻譯成以下代碼來添加對象對事件的關(guān)注:

mm.add_NewMail(new EventHandler<NewMailEventArgs>(this.FaxMsg));

這樣我們的例子就完成了,當有新的郵件收到時就會觸發(fā)對郵件類事件關(guān)注的所有方法,即例子中的Fax中的FaxMsg方法。例子需要對大家理解事件有所幫助。

相關(guān)文章

  • C#使用IronPython調(diào)用python代碼的實現(xiàn)示例

    C#使用IronPython調(diào)用python代碼的實現(xiàn)示例

    本文主要介紹了在C#中使用IronPython調(diào)用Python代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • Entity?Framework使用ObjectContext類

    Entity?Framework使用ObjectContext類

    這篇文章介紹了Entity?Framework使用ObjectContext類的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 一個C#開發(fā)者重溫C++的心路歷程

    一個C#開發(fā)者重溫C++的心路歷程

    作為一個C#開發(fā)為什么要重新學習C++呢?因為在C#在很多業(yè)務場景需要調(diào)用一些C++編寫的COM組件,如果不了解C++,那么,很容易。。。注定是要被C++同事忽悠的
    2019-05-05
  • Silverlight實現(xiàn)星星閃爍動畫

    Silverlight實現(xiàn)星星閃爍動畫

    這篇文章主要為大家詳細介紹了Silverlight實現(xiàn)星星閃爍動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C#中split用法實例總結(jié)

    C#中split用法實例總結(jié)

    這篇文章主要介紹了C#中split用法,結(jié)合實例形式總結(jié)分析了C#常見的split操作字符串相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • C#結(jié)合JS修改解決KindEditor彈出層問題

    C#結(jié)合JS修改解決KindEditor彈出層問題

    KindEditor 是一款出色的富文本HTML在線編輯器,這里我們講述在使用中遇到的一個問題,在部署到某些 WEB 應用項目中,點擊類似彈出層功能時,只顯示了遮罩層,而內(nèi)容層則定位無法正確顯示,所以本文給大家介紹了C#結(jié)合JS 修改解決 KindEditor 彈出層問題
    2024-06-06
  • C#檢查遠程或本地磁盤使用率

    C#檢查遠程或本地磁盤使用率

    要檢查磁盤的使用情況確定程序放哪個服務器和清理垃圾,所以寫個小程序幫忙檢查。本文給大家介紹C#檢查遠程或本地磁盤使用率的相關(guān)知識,感興趣的朋友一起學習吧
    2016-04-04
  • c#發(fā)送請求訪問外部接口的實例

    c#發(fā)送請求訪問外部接口的實例

    這篇文章主要介紹了c#發(fā)送請求訪問外部接口的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#調(diào)用C類型dll入?yún)閟truct的問題詳解

    C#調(diào)用C類型dll入?yún)閟truct的問題詳解

    這篇文章主要給大家介紹了關(guān)于C#調(diào)用C類型dll入?yún)閟truct問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C#調(diào)用WinAPI部分命令的方法實現(xiàn)

    C#調(diào)用WinAPI部分命令的方法實現(xiàn)

    本文主要介紹了C#調(diào)用WinAPI部分命令的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01

最新評論

阳春市| 收藏| 宜春市| 土默特右旗| 宝兴县| 侯马市| 新干县| 沂水县| 三门峡市| 龙山县| 襄樊市| 比如县| 迭部县| 长武县| 南川市| 连城县| 缙云县| 高平市| 昌平区| 六枝特区| 东明县| 读书| 长武县| 广水市| 墨江| 濮阳市| 乌鲁木齐县| 加查县| 衡阳县| 额尔古纳市| 新兴县| 二手房| 乌拉特后旗| 阿瓦提县| 高州市| 蒲城县| 福清市| 永胜县| 金湖县| 洪江市| 长武县|