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

本文共 1348 字,大约阅读时间需要 4 分钟。

1.    委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。 可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。自定义的委托类编译后可以看到都继承了它继承了System.MulticastDelegate类
 
2.     委托定义返回值一般都是void,因为委托变量可以提供多个订阅者注册,如果定义了返回值,结果会是后面一个方法的返回值覆盖前面的,最终只返回一个值,而且发布者与订阅者是松耦合,发布者不关心谁订阅了它的事件,为什么订阅,更不关心返回值
 
3.    事件封装了委托类型的变量,在类的内部不管声明是public还是protected,它总是private,在类的外部注册"+="和注销"-="的访问限定符与你在声明事件时使用的访问符相同.如果事件只允许一个客户订阅,可以将时间定义成private,这样外部无法调用"+="订阅事件,然后实现一个供注册事件的公共方法,里面只有赋值操作.
 
4.     事件访问器类似于属性访问器,不同之处在于事件访问器被命名为 add 和 remove。 在大多数情况下都不需要提供自定义的事件访问器。 如果您在代码中没有提供自定义的事件访问器,编译器会自动添加事件访问器。
 
5.    事件的调用只能在定义事件的类内调用,但订阅/取消事件要在类外部
 
6.    在Delegate内部,维护了一个委托链表,链表上的每一个元素,为一个只包含一个目标方法的委托对象。而通过Delegate基类的GetInvocationList()静态方法,可以获得这个委托链表。随后我们遍历这个链表,通过链表中的每个委托对象来调用方法,这样就可以分别获得每个方法的返回值,而且可以避免由于异常导致后续函数无法调用的问题
 
7.    它是定义在Delegate基类中的DynamicInvoke()方法,通常用于调用委托方法

public object DynamicInvoke(params object[] args);

8.    委托的异步调用

通过调用GetInvocationList获取每个委托对象,然后调用委托对象的BeginInvoke方法

9.    EventHandler,.net定义好的委托,无法包含事件数据,因为EventArgs中没有存储数据的属性

 public delegate void EventHandler(object sender,EventArgs e)

 如果要使用带数据的事件使用下列委托

public delegate void EventHandler
( Object sender, TEventArgs e ) 10. .Net FrameWork规范
  • 委托类型的名称都应该以EventHandler结束。
  • 委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
  • 事件的命名为 委托去掉 EventHandler之后剩余的部分。
  • 继承自EventArgs的类型应该以EventArgs结尾。

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/phenix-yu/p/3549398.html

你可能感兴趣的文章
分布式系统事务一致性解决方案
查看>>
开启一个项目如何上传到git
查看>>
ie文本框内容不居中问题
查看>>
利用grub2制作多启动U盘
查看>>
MQTT的学习研究(十三) IBM MQTTV3 简单发布订阅实例
查看>>
使用 github Pages 服务建立个人独立博客全过程
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
spring-使用MyEcilpse创建demo
查看>>
JavaScript -- 数据存储
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
scrapy-加蘑菇代理
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
深入理解基于selenium的二次开发
查看>>
11、类的继承
查看>>
单片机的动手实践篇--51单片机玩转12864
查看>>
较快的maven的settings.xml文件
查看>>