不忘(wang)本(ben)~委托和事件(續)
今天再說說委托在.net中的發展吧,從1.1,2.0到3.0是有不同的,主要表現在定義,調用上,而使用上還是一樣的.
在 1.0 的C# 版本中,聲明的唯一方法是使用。 C# 2.0 引入了匿名方法,而在 C# 3.0 及更高版本中,Lambda 表達式取代了匿名方法,作為編寫內聯代碼的首選方式。 不過,本主題中有關匿名方法的信息同樣也適用于 Lambda 表達式。 有一種情況下,匿名方法提供了 Lambda 表達式中所沒有的功能。 您可使用匿名方法來忽略參數列表。 這意味著匿名方法可轉換為具有各種簽名的委托。 這對于 Lambda 表達式來說是不可能的。
下面實例中,我叫一個按鈕button1分布使用了最原始的方法和匿名的方法來回調方法,看代碼:
1 private void InitializeComponent() 2 3 { 4 5 this.button1 = new System.Windows.Forms.Button(); 6 7 this.SuspendLayout(); 8 9 // 10 11 // button1 12 13 // 14 15 this.button1.Location = new System.Drawing.Point(74, 40); 16 17 this.button1.Name = "testbtn1"; 18 19 this.button1.Size = new System.Drawing.Size(75, 23); 20 21 this.button1.TabIndex = 0; 22 23 this.button1.Text = "點我"; 24 25 this.button1.UseVisualStyleBackColor = true; 26 27 this.button1.Click += new System.EventHandler(this.button1_Click); 28 29 30 31 #region 為按鈕的單擊事件添加一個匿名的方法 32 33 this.button1.Click += delegate(System.Object o, System.EventArgs e) 34 35 { 36 37 System.Windows.Forms.MessageBox.Show("Click 1"); 38 39 }; 40 41 this.button1.Click += delegate(System.Object o, System.EventArgs e) 42 43 { 44 45 System.Windows.Forms.MessageBox.Show("Click 2"); 46 47 }; 48 49 #endregion
好了(le),對委托(tuo)有了(le)了(le)解后,再(zai)來詳細的看看MSDN是如(ru)何(he)定義事(shi)件(jian)的吧:
事件(C# 編程指南)
或對象可以通過事件向其他類或對象通知(zhi)發(fa)生(sheng)的相關事情。 發(fa)送(或引發(fa))事件(jian)的類稱為(wei)“發(fa)行者”,接收(或處理)事件(jian)的類稱為(wei)“訂戶”。
在(zai)典型的 C# Windows 窗體或(huo) Web 應用程(cheng)序中,可訂(ding)閱由控(kong)件(jian)(jian)(如按鈕和列表框)引發(fa)的事(shi)件(jian)(jian)。 可使用 Visual C# 集成(cheng)開發(fa)環(huan)境 (IDE) 來瀏覽控(kong)件(jian)(jian)發(fa)布的事(shi)件(jian)(jian),選擇要處(chu)理(li)的事(shi)件(jian)(jian)。 IDE 會自動添(tian)加空事(shi)件(jian)(jian)處(chu)理(li)程(cheng)序方(fang)法(fa)和訂(ding)閱事(shi)件(jian)(jian)的代碼(ma)。
下(xia)圖是一個按鈕引發(fa)了(le)一個事(shi)件:(訂閱事(shi)件代碼)
1 this.button1.Click += new System.EventHandler(this.button1_Click);
如果希望取消訂閱可以這樣寫:
1 this.button1.Click -= new System.EventHandler(this.button1_Click);
而VS同時幫助我們添加了一個空的處理事件的方法,如下:
1 private void button1_Click(object sender, EventArgs e) 2 3 { 4 5 }
而這一(yi)切都(dou)是VS,IDE自動(dong)為我們(men)做好的,不用我們(men)去干(gan)預(yu).