博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不忘本~委托与事件
阅读量:6325 次
发布时间:2019-06-22

本文共 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的委托,当然它们也有其它很多重载,根据具体的应用去使用它们。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
Matlab中的取整-floor,ceil,fix,round
查看>>
Atitit .c#的未来新特性计划草案
查看>>
经验总结17--submitbutton,ajax提交
查看>>
mysql分表技术
查看>>
.Net 垃圾回收和大对象处理 内存碎片整理
查看>>
Linux是如何启动的
查看>>
HiKey连接
查看>>
wget 参数大全
查看>>
使用Loadrunner进行文件的上传和下载
查看>>
Linux C 静态库(.a) 与 动态库(.so) 的详解
查看>>
JS函数
查看>>
sql语句分组/排序/计算总数/连接等sql语句书写
查看>>
【.net 深呼吸】启动一个进程并实时获取状态信息
查看>>
MVC5 的MicrosoftOwinSecurity扩展插件——微信,QQ登录第三方源码
查看>>
分布式系统理论基础 - CAP
查看>>
mysql 用户管理和权限设置
查看>>
【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目
查看>>
[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
查看>>
Numpy 的ndarray
查看>>
牛人博客 列表
查看>>