B\S备忘录21——使用反射将委托挂钩
2015-06-30 20:19
190 查看
上上篇博客,写了我用反射实现动态配置业务的过程,其中有一个方法是关键点,CreateDelegate。
以前使用委托的时候都是使用把方法绑定给委托的方式,来使用。这次是需要使用MethodInfo这个类型来绑定委托,查的资料还是MSDN比较详细。
这个CreateDelegate一共有。。。好多个重载,我用的只是其中一种:使用指定的对象创建指定类型的委托,该委托表示指定的方法。
这里我是用的是MSDN上的第二个重载,Delegate.CreateDelegate(Type,Object,MethodInfo),三个参数分别是,要创建的委托的类型
如果是正常情况下,我这种创建委托的方式,CreateDelegate的第二个参数可以不写的,本身我们就有一个委托的对象来接受创建出来的委托,并不需要null这个参数先绑定一个空值,再绑定到ex对象上,这样的效率反而低了。但是我在工作流系统中出现了一个错误。
无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容。
后来解决这个问题就是写成现在这个样子,我后来找到了原因,委托类型的声明,与创建委托的过程,这两段代码是在两个系统中写的,所以出现了签名不一致的情况,网上给出的解决方案是这样的。
在“解决方案资源管理器”中选定一个项目,然后在“项目”菜单中单击“属性”。
在“项目设计器”中,单击“安全”选项卡。
选择“启用 ClickOnce安全设置”复选框,然后单击“这是不完全可信的应用程序”选项按钮。
单击“高级”按钮。
选择“使用选定权限集调试此应用程序”复选框,然后单击“确定”。
但是我这里并没有找到安全选项卡,所以就只能用这样的低效率方案了。
以前使用委托的时候都是使用把方法绑定给委托的方式,来使用。这次是需要使用MethodInfo这个类型来绑定委托,查的资料还是MSDN比较详细。
这个CreateDelegate一共有。。。好多个重载,我用的只是其中一种:使用指定的对象创建指定类型的委托,该委托表示指定的方法。
这里我是用的是MSDN上的第二个重载,Delegate.CreateDelegate(Type,Object,MethodInfo),三个参数分别是,要创建的委托的类型
public delegate void Caller(); public static void Demo() { //获得MyMethod方法信息 MethodInfo minfo = typeof(Derived).GetMethod("MyMethod"); //创建委托并且绑定到Caller委托类型的对象上 Caller ex =(Caller)Delegate.CreateDelegate(typeof(Caller),null, minfo); }这样就创建成功一个委托,并且不需要知道MyMethod方法的具体信息。要是通过反射来获得MethodInfo的话,上上篇博客中已经写到了,这里就不再写一遍了。
如果是正常情况下,我这种创建委托的方式,CreateDelegate的第二个参数可以不写的,本身我们就有一个委托的对象来接受创建出来的委托,并不需要null这个参数先绑定一个空值,再绑定到ex对象上,这样的效率反而低了。但是我在工作流系统中出现了一个错误。
无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容。
后来解决这个问题就是写成现在这个样子,我后来找到了原因,委托类型的声明,与创建委托的过程,这两段代码是在两个系统中写的,所以出现了签名不一致的情况,网上给出的解决方案是这样的。
在“解决方案资源管理器”中选定一个项目,然后在“项目”菜单中单击“属性”。
在“项目设计器”中,单击“安全”选项卡。
选择“启用 ClickOnce安全设置”复选框,然后单击“这是不完全可信的应用程序”选项按钮。
单击“高级”按钮。
选择“使用选定权限集调试此应用程序”复选框,然后单击“确定”。
但是我这里并没有找到安全选项卡,所以就只能用这样的低效率方案了。
相关文章推荐
- 黑马程序员——java的IO之字符流,字节流,转换流
- 日惹中文离线地图App上线
- node.js安装、使用
- 超漂亮Js+css图片幻灯切换
- Struts2学习--配置及原理简述
- 多目标优化的遗传算法及其改进(浮点数编码),对多个函数进行测试
- 随机获取一个集合(List, Set)中的元素,随机获取一个Map中的key或value
- iOS - 常用正则表达式判断邮箱、身份证..是否正确
- extern “C”
- 雅加达中文离线地图App上线
- gps软件预览
- Win7刚装完就用了40多个G
- 大型网站架构体系的演变(下)
- 看看我们熟知的17个行业如何被互联网所颠覆
- 默认端口:ftp,ssh,telnet,dhcp,mail,pop3,smtp,dns,http,sm等
- 检验身份证信息是否可靠。
- libsvm-3.12中的 README
- 忘记的C语言中的一些知识点
- POJ 3696 神TM数论
- C#反射机制