1. 程式人生 > >簡化事件和委託

簡化事件和委託

  • 介紹
  • 什麼是委託?
  • 理解事件
  • event關鍵字
  • 結束語


介紹

    當我在學習事件和委託時,我看了許多文章才能明白他們是什麼和如何使用他們,現在我想在這裡將我學習的東西以及你需要學習的內容呈現在這裡。

什麼是委託?
    委託和事件的概念是綁在一起的。委託可以認為是函式指標,也就是說,委託執行函式。
    Delegate是一個類。當建立委託例項時,可以通過函式名(如構造委託的引數),委託執行這個函式。
    每個委託都有一個簽名。例如:

  1. Delegate int SomeDelegate(string s, bool b);
  2. //是委託的宣告。當看到這個委託前面時,也就說委託具有返回一個整型資料和具有兩個引數(string和bool)。

    可以說當建立委託例項時,可以通過函式名作為建立委託的引數。值得注意的是作為同一個委託的函式有相同的函式簽名,可以作為委託的引數。

考慮下面的函式:

  1. privateint SomeFunction(string str, bool bln){...}

    可以通過SomeDelegate構造器來呼叫這個方法,因為他們具有相同的簽名。

  1. SomeDelegate sd = new SomeDelegate(SomeFunction);

    現在sd指向SomeFunction,換句話說,SomeFunction註冊了sd。如果想呼叫sd,SomeFunction將被呼叫。記住所說的註冊函式。接下來處理註冊的函式。

  1. sd("somestring"true);

    現在應該知道如何使用委託,開始理解事件......

理解事件

  • Button是一個類,當點選它的時候將會產生click事件。
  • Time是一個類,每毫秒產生tick事件。


    想知道這是如何產生的嗎?通過下面的例子來學習:

    這個方案:有一個名為Counter的類。類中包含名為CountTo(int countTo, int reachableNum)的方法開始從0統計到countTo,當達到reachableNum是將觸發名為NumberReached的事件。

......

event關鍵字
    許多人可能會問這樣的問題:“如果沒有event關鍵字將發生什麼?”

    本質上,宣告event關鍵字是防止其他的使用者的委託設定為null。這為什麼這麼重要?想象一下作為客戶端新增委託將回調類方法列表。因此有其他客戶端。這樣做是好的。現在想象可以使用“+=”將代替新的“=”來設定回撥方法列表。所有其他客戶將不會收到他們的回撥函式。在這種情形下使用event關鍵字解決目標。如果在Counter類中移除event關鍵字在應用程式中編譯將會出現編譯錯誤:

結束語


    ...............

完整的文章和程式碼下載:http://www.dingos.cn/index.php?topic=766.0