不忘本~委托和事件(續)
今天再說說委托在.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
好了,對委托有了了解后,再來詳細的看看MSDN是如何定義事件的吧:
事件(C# 編程指南)
類或對象可以通過事件向其他類或對象通知發生的相關事情。 發送(或引發)事件的類稱為“發行者”,接收(或處理)事件的類稱為“訂戶”。
在典型的 C# Windows 窗體或 Web 應用程序中,可訂閱由控件(如按鈕和列表框)引發的事件。 可使用 Visual C# 集成開發環境 (IDE) 來瀏覽控件發布的事件,選擇要處理的事件。 IDE 會自動添加空事件處理程序方法和訂閱事件的代碼。
下圖是一個按鈕引發了一個事件:(訂閱事件代碼)
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 }
而這一切都是VS,IDE自動為我們做好的,不用我們去干預.
浙公網安備 33010602011771號