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