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

阅读 116

2022-12-01

​​返回目录​​

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

​​返回目录​​

精彩评论(0)

0 0 举报