欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#事件實例詳解

 更新時間:2017年06月22日 14:19:36   投稿:lqh  
這篇文章主要介紹了C#事件實例詳解的相關資料,需要的朋友可以參考下

C#事件實例詳解

C#和JAVA有許多相似的地方,設計思想差不多,語法及其相像,均傳承自面向對象設計思想,靈感來自C++并取其精華去其“糟粕(二字持保留意見)”,中間語言、解釋執(zhí)行、一次編譯、到處執(zhí)行,出身豪門算得上是表兄弟關系,各自擁有龐大的擁躉,兩種語言在發(fā)展的道路你追我趕相互借鑒相互學習相互滲透,至于誰的IDE更強大對于一個用了二十年vim編輯器的人來說實在無從評判,強大到讓人內牛滿面~

    C#語言中關于事件(event)結合代理(delegate)實現(xiàn)對象狀態(tài)變更時的通知機制,總感覺這種處理有點過于復雜化了,但既然人家這么設計必定有人家的道理,相信并向人家學習而不急于批判和否定才能讓自己進步的更快,個人覺得這種處理大概是來自于視窗獨有的對各個控件事件集中快速響應的機制吧,這可能也是從事前后端開發(fā)關注點的差異,前端重人機交互當然交互的核心就是不確定時間屬性和狀態(tài)的事件,后端重觸發(fā)每個事件的發(fā)生基本都是預定義且流程化構建好的,所以接下來嘗試理解和解讀一下C#的事件。

    第一步:聲明一個代理,這個代理可以是系統(tǒng)的也可以是自定義的。

 public delegate void MyDelegate();                   // 聲明無參無返回值代理

  public delegate bool MyDelegate(int k, int v);         // 聲明有參有返回值代理

    第二步:創(chuàng)建一個包含該代理事件的對象,對象中調用代理實現(xiàn)事件的處理。

  public class MyArrayList : ArrayList

  {

    public event MyDelegate MyChanged;           // 聲明代理事件

    public override void Add(object o)                // 覆蓋父類方法

    {

       base.Add(o);                              // 調用父類方法

      OnChanged();                             // 調用事件函數(shù)

    }

    protected virtual void OnChanged()

    {

      if (null != MyChanged) MyChanged();        // 代理觸發(fā)事件

    }

  }

    第三步:創(chuàng)建一個類,將事件和代理綁定到一起,a、類構造時以包含代理事件對象作為入?yún)?,b、“+=”運算符實現(xiàn)綁定,c、在代理中傳入類成員函數(shù)。

 public class MyEvent

  {

    private MyArrayList list;

    public MyEvent(MyArrayList l)

    {

      list = l;

      list.MyChanged += new MyDelegate(ListChanged);    // 綁定事件

    }

    private void ListChanged()                           // 被綁定事件

    {

      System.Console.WriteLine("ListChanged ...");

    }

  }

    第四步:創(chuàng)建含有事件的類的實例,創(chuàng)建含有方法的類的實例。

  public class MyTest

  {

    public static void Main()

    {

      MyEvent me = new MyEvent(new MyArrarList());

      me.Add("object_1");

    }

  }

    仔細研究發(fā)現(xiàn),代理相當于C\C++中的函數(shù)指針,但功能更強大,使用更安全,代理實例在創(chuàng)建的時候,代理會把傳給它的參數(shù)傳給綁定的方法,而且代理可以通過“+=”運算符搭載更多的方法,下面是對比C\C++函數(shù)指針的用法。

  char* (*pFun)(char*) = NULL;

  pFun = GtCodeUtf8ToGB2312;

  char* pszData = (*pFun)("計算機");

 

  char* GtCodeUtf8ToGB2312(char* pszUtf8)

  {

    char* pszGB2312 = NULL;

    ......

    return pszGB2312;

  }

    再舉兩個C語言中典型的函數(shù)指針的例子:

    例一:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);其中第三個參數(shù)是一個函數(shù)地址,指向被創(chuàng)建線程的核心處理函數(shù)。

    例二:void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));其中最后一個參數(shù)也是一個函數(shù)地址,指向兩個元素對比計算函數(shù)。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • C#以流方式讀socket超時設置的實例

    C#以流方式讀socket超時設置的實例

    這篇文章主要為大家詳細介紹了C#以流方式讀socket超時設置的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • LINQ排序操作符用法

    LINQ排序操作符用法

    這篇文章介紹了LINQ排序操作符的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#主線程堵塞問題的解決方案

    C#主線程堵塞問題的解決方案

    這篇文章主要介紹了C#主線程堵塞問題的解決方案,在C#中,異步方法和async/await關鍵字是用來解決主線程阻塞的有效方式,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • C#基于Sockets類實現(xiàn)TCP通訊

    C#基于Sockets類實現(xiàn)TCP通訊

    這篇文章主要為大家詳細介紹了C#基于Sockets類實現(xiàn)TCP通訊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Google.Protobuf工具在C#中的使用方法

    Google.Protobuf工具在C#中的使用方法

    本文詳細講解了Google.Protobuf工具在C#中的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 總結C#刪除字符串數(shù)組中空字符串的幾種方法

    總結C#刪除字符串數(shù)組中空字符串的幾種方法

    C#中要如何才能刪除一個字符串數(shù)組中的空字符串呢?下面的文章會介紹多種方式來實現(xiàn)清除數(shù)組中的空字符串,以及在.net中將字符串數(shù)組中字符串為空的元素去除。
    2016-08-08
  • C#拼圖游戲編寫代碼

    C#拼圖游戲編寫代碼

    這篇文章主要為大家詳細介紹了C#拼圖游戲的編寫代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#全局熱鍵設置與窗體熱鍵設置實例

    C#全局熱鍵設置與窗體熱鍵設置實例

    這篇文章主要介紹了C#全局熱鍵設置與窗體熱鍵設置實例,對C#全局熱鍵設置與窗體熱鍵設置的實現(xiàn)方法與具體代碼進行了詳細的介紹,需要的朋友可以參考下
    2014-10-10
  • C#實現(xiàn)泛型動態(tài)循環(huán)數(shù)組隊列的方法

    C#實現(xiàn)泛型動態(tài)循環(huán)數(shù)組隊列的方法

    隊列一種先進先出的數(shù)據(jù)結構,本文通過實例代碼給大家介紹下C#實現(xiàn)泛型動態(tài)循環(huán)數(shù)組隊列的方法,感興趣的朋友一起看看吧
    2022-01-01
  • C# DataTable常見用法匯總

    C# DataTable常見用法匯總

    這篇文章主要介紹了C# DataTable常見用法,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-08-08

最新評論