最近一些都在看关于反射的内容,然后在网上大多数都是通过反射获得类型中方法,属性、字段这样的文章, 但是对于如何获得委托类型怎么去实现的却没有, 所以写下这边篇文章来让自己以后很好的复习以及想了解的朋友做参考。

一、 利用反射获得委托类型并创建委托实例

using System;
using System.Reflection;namespace ConsoleApplication1
{public  class Test{public delegate void delegateTest(string s);public void method1(string s){Console.WriteLine("Create Delegate Instance: " + s);}}class Program{static void Main(string[] args){Test test = new Test();Type t = Type.GetType("ConsoleApplication1.Test");// 因为委托类型编译后是作为类的嵌套类型的,所以这里通过GetNestedType(String s)的方法来获得委托类型。Type nestType = t.GetNestedType("delegateTest");MethodInfo method =test.GetType().GetMethod("method1",  BindingFlags.Public | BindingFlags.Static|BindingFlags.Instance);if (method != null){// 创建委托实例Delegate method1 = Delegate.CreateDelegate(nestType, test, method);//动态调用委托实例method1.DynamicInvoke("Hello");}Console.Read();}}
}

二、 利用反射获得事件类型和绑定事件处理程序

using System;
using System.Reflection;namespace ConsoleApplication2
{public class Test{public event EventHandler TestEvent;public void Triggle(){if (TestEvent != null){TestEvent(this, null);}}}class Program{static void Main(string[] args){Test testT=new Test();EventInfo eventinfo = typeof(Test).GetEvent("TestEvent");if (eventinfo != null){// 为事件动态绑定处理程序eventinfo.AddEventHandler(testT, new EventHandler(triggleEvent));testT.Triggle();}Console.Read();}public static void triggleEvent(object sender, EventArgs e){Console.WriteLine("Event has been Triggled");}}
}

希望这些使大家对放射有个更好的理解。

转载于:https://blog.51cto.com/learninghard/1034785

利用反射获得委托和事件以及创建委托实例和添加事件处理程序相关推荐

  1. js给动态创建出来的元素添加事件

    场景:因为js都是dom操作,所以如果动态创建一个元素的话,本身是不带自身事件的,因为在创建这个元素前,dom已经创建完成了,所以在动态创建出来的元素身上不包含事件 所以我们需要给这些动态创建出来的元 ...

  2. html动态生成按钮事件,javascript 动态生成按钮并添加事件时为什么不响应?

    javascript 动态生成按钮并添加事件时为什么事件不响应?(谢谢大家!) 1)html部分 1 2 3 4 5 6 7 8 9 10 11 12 2)script部分 //_t 为一个现在的Ta ...

  3. MFC中动态创建控件以及添加事件响应

    本文实例讲述了MFC中动态创建控件以及事件响应实现方法,分享给大家供大家参考.具体实现方法如下: 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态 ...

  4. java button 添加事件_java中如何给button添加事件

    一个例子, 参考下; 把第一个panelright.remove(firstpanel); package baidu; import java.awt.*; import java.awt.even ...

  5. JavaScript(11) - 阻止事件冒泡和默认行为,拖拽,事件监听器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.阻止事件冒泡和默认行为 二.拖拽 1, 实现拖拽相关的三大事件: 2, 实现拖拽思路: 1, 给目标元素添加onmous ...

  6. mysql 的事件_一文总结MySQL数据库事件--定时任务实现方式

    由于最近在做某些日志表的清理工作,会用到定时任务,所以这里也简单介绍一下mysql如何用事件来实现定时任务. 后面会介绍两个日志表清理实现方案,一种是传统的定时delete,另一种会稍微复杂点,主要是 ...

  7. iframe关闭时触发事件_超详细的mysql数据库事件--定时任务介绍及日常管理

    概述 由于最近在做某些日志表的清理工作,会用到定时任务,所以这里也简单介绍一下mysql如何用事件来实现定时任务. 后面会介绍两个日志表清理实现方案,一种是传统的定时delete,另一种会稍微复杂点, ...

  8. JS事件冒泡机制和兼容性添加事件

    本篇文章主要来讲讲 事件的冒泡机制 和 添加事件的几种方法. 一. JS的时间传递顺序: 捕获阶段 -> 目标阶段 -> 冒泡阶段 捕获阶段是指从父层往子层找.比如 <body> ...

  9. js添加事件 attachEvent 和addEventListener的用法

    一般我们在JS中添加事件,是这样子的: obj.onclick = method 这种绑定事件的方式,兼容主流浏览器,但是如果一个元素上添加多次同一个事件呢??? obj.onclick = meth ...

最新文章

  1. python 将列和索引的值变换_【编辑小组成长日记】Python学习第二期
  2. PCT-36.523
  3. java接口 密钥签名作用_api接口签名加密请求(二)
  4. php有意思知识分享,分享几个有意思的数组方法
  5. Delphi 105错误
  6. html和php文件怎么连接,html页面跟php文件连接的方法
  7. 2019年普通高等程序员招生统一考试
  8. 【codevs1867】【Tyvj3508】【BZOJ1041】圆上的整点,数学乱搞
  9. 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
  10. 咱也过个双 11 !Flink Forward Asia 培训门票买一赠一!
  11. 怎么隐藏php版本,Linux服务器中怎样隐藏PHP版本
  12. Qt::WA_QuitOnClose
  13. 2.4 分块矩阵(第2章矩阵代数)
  14. Java JRE 6安全更新
  15. 数据传输服务包年包月_包年包月转按月付费
  16. windows下搭建ITS运行环境
  17. 软件发明专利实例_软件发明专利思路
  18. 使用antigen轻松打造赏心悦目的shell环境
  19. overleaf表格_LaTeX基本命令使用教程(清晰实例)(Overleaf平台)(论文排版)
  20. 计算机专业370,2018复旦计算机专硕初试370+经验贴(更新部分内容)

热门文章

  1. Wirshark 显示过滤器
  2. throttle_classes 60秒访问10次限制
  3. 第二章节 怀疑的练习和不会的练习
  4. 利刃 MVVMLight 1:MVVMLight介绍以及在项目中的使用
  5. MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出
  6. 快速学习者的高效学习策略
  7. unity3D游戏开发三之unity编辑器二
  8. 《RESTful Web Services》第一章 使用统一接口
  9. Extjs4.1:模式窗口的设置
  10. 在ios开发中使用 try 和 catch 来捕获错误。