本文共 2272 字,大约阅读时间需要 7 分钟。
MSDN是这样定义委托的:
是一种定义方法签名的类型。 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联。 您可以通过委托实例调用方法。
下面这个委托及事件主要完成显示按钮名称和值的功能
1 ///2 3 /// 自定义委托 4 5 /// 6 7 class SelfDelegate 8 9 {10 11 ///12 13 /// 显示工具控件信息14 15 /// 16 17 /// 18 19 internal delegate void ToolInfo(object sender); //把委托看成是一种特殊的类,而事件就是委托类的一个实例20 21 22 23 ///24 25 /// 显示控件信息事件26 27 /// 28 29 internal event SelfDelegate.ToolInfo ToolName;30 31 32 33 ///34 35 /// 事件触发机制36 37 /// 38 39 /// 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 ///4 5 /// this.button1.Click += new System.EventHandler(this.button1_Click); 6 7 /// 为事件加上一个委托实例,这行是VS自动添加上去的 8 9 /// this.button1就是我们刚刚添加的按钮10 11 /// 12 13 /// 14 15 /// 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 ///38 39 /// 显示控件名称40 41 /// 42 43 /// 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的委托,当然它们也有其它很多重载,根据具体的应用去使用它们。
本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。