不忘本~委托和事件(续)

今天再说说委托在.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自动为我们做好的,不用我们去干预.

返回目录

posted @ 2011-06-09 15:01  张占岭  阅读(455)  评论(0编辑  收藏  举报