事件的由來
我們繼續思考上面的程式:上面的三個方法都定義在programe類中,這樣做是為了理解的方便,實際應用中,通常都是 greetpeople 在乙個類中,chinesegreeting和 englishgreeting 在另外的類中。現在你已經對委託有了初步了解,是時候對上面的例子做個改進了。假設我們將greetingpeople()放在乙個叫greetingmanager的類中,那麼新程式應該是這個樣子的:
namespace delegate
}class program
private static void chinesegreeting(string name)
static void main(string args) }}
這個時候,如果要實現前面演示的輸出效果,main方法我想應該是這樣的:
static void main(string args)
我們執行這段**,嗯,沒有任何問題。程式一如預料地那樣輸出了:
morning, jimmy zhang
早上好, 張子陽
static void main(string args)
輸出:morning, jimmy zhang
早上好, jimmy zhang
到了這裡,我們不禁想到:物件導向設計,講究的是物件的封裝,既然可以宣告委託型別的變數(在上例中是delegate1),我們何不將這個變數封裝到 greetmanager類中?在這個類的客戶端中使用不是更方便麼?於是,我們改寫greetmanager類,像這樣:
public class greetingmanager
}現在,我們可以這樣使用這個委託變數:
static void main(string args)
儘管這樣達到了我們要的效果,但是似乎並不美氣,光是第乙個方法註冊用「=」,第二個用「+=」就讓人覺得彆扭。此時,輪到event出場了,c# 中可以使用事件來專門完成這項工作,我們改寫greetingmanager類,它變成了這個樣子:
public class greetingmanager
}很容易注意到:makegreet 事件的宣告與之前委託變數delegate1的宣告唯一的區別是多了乙個event關鍵字。看到這裡,你差不多明白到:事件其實沒什麼不好理解的,宣告乙個事件不過類似於宣告乙個委託型別的變數而已。
我們想當然地改寫main方法:
static void main(string args)
這次,你會得到編譯錯誤:事件「delegate.greetingmanager.makegreet」只能出現在 += 或 -= 的左邊(從型別「delegate.greetingmanager」中使用時除外)。
我比較笨系列 《委託 》(三)事件
事件的由來 我們繼續思考上面的程式 上面的三個方法都定義在programe類中,這樣做是為了理解的方便,實際應用中,通常都是 greetpeople 在乙個類中,chinesegreeting和 englishgreeting 在另外的類中。現在你已經對委託有了初步了解,是時候對上面的例子做個改進了...
由委託說明事件的由來2
由於以上兩個不足,我們可以使用事件來解決問題。1 即在使用者控制項的 如下 public partial class eventusercontrol usercontrol int count 0 private void button1 click object sender,eventargs...
委託和事件 第 3 頁 事件的由來
事件的由來 我們繼續思考上面的程式 上面的三個方法都定義在programe類中,這樣做是為了理解的方便,實際應用中,通常都是 greetpeople 在乙個類中,chinesegreeting和 englishgreeting 在另外的類中。現在你已經對委託有了初步了解,是時候對上面的例子做個改進了...