不忘本~委托与事件

简介:

MSDN是这样定义委托的:

委托是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。

下面这个委托及事件主要完成显示按钮名称和值的功能

 1 /// <summary>
 2 
 3     /// 自定义委托
 4 
 5     /// </summary>
 6 
 7     class SelfDelegate
 8 
 9     {
10 
11         /// <summary>
12 
13         /// 显示工具控件信息
14 
15         /// </summary>
16 
17         /// <param name="sender"></param>
18 
19         internal delegate void ToolInfo(object sender); //把委托看成是一种特殊的类,而事件就是委托类的一个实例
20 
21  
22 
23         /// <summary>
24 
25         /// 显示控件信息事件
26 
27         /// </summary>
28 
29         internal event SelfDelegate.ToolInfo ToolName;
30 
31  
32 
33         /// <summary>
34 
35         /// 事件触发机制
36 
37         /// </summary>
38 
39         /// <param name="sender"></param>
40 
41         internal void doEvent(object sender)
42 
43         {
44 
45             ToolName(sender);//事件名(方法签名)
46 
47         }
48 
49  
50 
51     }

在Form1部分类中的内容是:

 1   SelfDelegate sd = new SelfDelegate();
 2 
 3         /// <summary>
 4 
 5         /// this.button1.Click += new System.EventHandler(this.button1_Click);
 6 
 7         /// 为事件加上一个委托实例,这行是VS自动添加上去的
 8 
 9         /// this.button1就是我们刚刚添加的按钮
10 
11         /// </summary>
12 
13         /// <param name="sender"></param>
14 
15         /// <param name="e"></param>
16 
17         private void button1_Click(object sender, EventArgs e)
18 
19         {
20 
21             MessageBox.Show("按钮单击事件被触发");
22 
23  
24 
25             sd.ToolName += new SelfDelegate.ToolInfo(ShowToolName);
26 
27             sd.ToolName += new SelfDelegate.ToolInfo(ShowToolValue);
28 
29             sd.doEvent(sender); //将本对象源作为参数传递
30 
31         }
32 
33  
34 
35         #region 实现了委托方法签名的方法
36 
37         /// <summary>
38 
39         /// 显示控件名称
40 
41         /// </summary>
42 
43         /// <param name="sender"></param>
44 
45         private void ShowToolName(object sender)
46 
47         {
48 
49             Button btn = sender as Button;
50 
51             if (btn != null) //转换成功,失败为null,系统不会抛异常
52 
53             {
54 
55                 MessageBox.Show(string.Format("控件名称:{0}", btn.Name));
56 
57             }
58 
59         }
60 
61  
62 
63         private void ShowToolValue(object sender)
64 
65         {
66 
67             Button btn = sender as Button;
68 
69             if (btn != null) //转换成功,失败为null,系统不会抛异常
70 
71             {
72 
73                 MessageBox.Show(string.Format("控件值:{0}", btn.Text));
74 
75             }
76 
77         }
78 
79         #endregion

进行.net4.0之后,frameworks帮我们封装了很多委托,其中Action和Func<T>是比较常用的,Action表示一个没有返回值的委托,而Func<T>表示一个返回值类型为T的委托,当然它们也有其它很多重载,根据具体的应用去使用它们。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:不忘本~委托与事件,如需转载请自行联系原博主。

目录
相关文章
|
8月前
|
存储 安全 C#
C# - 委托与事件
这篇文档介绍了C#中的委托和事件。委托是存储方法引用的类型,支持回调、事件处理,具有引用方法、类型安全、多播性等特性,并在异步编程中发挥作用。事件是委托的封装,提供保护和订阅机制,防止外部直接访问。当需要在类内部控制方法调用,防止外部误触发时,可使用事件。
|
C#
C# 委托和事件
C# 委托和事件
104 0
C# 委托和事件
|
C#
艾伟_转载:解惑答疑:C#委托和事件
  相信很多人一直为C#委托和事件所困惑,尤其是C#的初学者,学到这一部分会感觉比较困难,很有可能就放弃了,而且.NET对委托和事件封装得挺好,一般都不怎么用到自定义的委托和事件,所以放弃学习该技术就有了借口!   网上也有不少此类的文章,最具代表性的是张子阳的C#中的委托和事件这篇,写得的确很好,...
1394 0
|
C#
艾伟:C# 中的委托和事件
引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。
802 0
|
C# 设计模式 编译器
|
Web App开发 安全 C#