利用反射绑定事件处理程序(C#)

传统的写法:强类型的情况下

using System;
using System.Collections.Generic;
using System.Text;

using System.Reflection;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Customer c = new Customer();
c.OnChange += new EventHandler(c_OnChange);

c.Change();
Console.Read();

}

static void c_OnChange(object sender, EventArgs e)
{
Console.WriteLine("事件被触发了");
}
}

class Customer
{
public event EventHandler OnChange;
public void Change()
{
if (OnChange != null)
OnChange(this, null);
}
}
}

值得了解的另外一个写法

using System;
using System.Collections.Generic;
using System.Text;

using System.Reflection;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Customer c = new Customer();
EventInfo evt = c.GetType().GetEvent("OnChange",
BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.Public
);

evt.AddEventHandler(c, new EventHandler(c_OnChange));

c.Change();
Console.Read();

}

static void c_OnChange(object sender, EventArgs e)
{
Console.WriteLine("事件被触发了");
}
}

class Customer
{
public event EventHandler OnChange;
public void Change()
{
if (OnChange != null)
OnChange(this, null);
}
}
}

传统的写法:强类型的情况下

using System;
using System.Collections.Generic;
using System.Text;

using System.Reflection;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Customer c = new Customer();
c.OnChange += new EventHandler(c_OnChange);

c.Change();
Console.Read();

}

static void c_OnChange(object sender, EventArgs e)
{
Console.WriteLine("事件被触发了");
}
}

class Customer
{
public event EventHandler OnChange;
public void Change()
{
if (OnChange != null)
OnChange(this, null);
}
}
}

值得了解的另外一个写法

using System;
using System.Collections.Generic;
using System.Text;

using System.Reflection;

namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Customer c = new Customer();
EventInfo evt = c.GetType().GetEvent("OnChange",
BindingFlags.NonPublic | BindingFlags.Instance
| BindingFlags.Public
);

evt.AddEventHandler(c, new EventHandler(c_OnChange));

c.Change();
Console.Read();

}

static void c_OnChange(object sender, EventArgs e)
{
Console.WriteLine("事件被触发了");
}
}

class Customer
{
public event EventHandler OnChange;
public void Change()
{
if (OnChange != null)
OnChange(this, null);
}
}
}

最新文章

  1. (1-2)配置的升级 - ASP.NET从MVC5升级到MVC6
  2. Eclipse 打不开
  3. 【C语言入门教程】4.7 指针的地址分配 - mallocl(), free()
  4. eclipse开启断言
  5. PoEdu - C++阶段班【Po学校】- 第1课
  6. ubuntu修改文件访问权限
  7. webpages框架中使用Html.TextArea()在前台显示多行信息时,如何进行大小、样式的设置
  8. ExtJs布局之accordion,fit,auto
  9. The Bookcase
  10. 外部div自适应内部标签的高度,设置最小高度、最大高度
  11. jQuery Mobile里xxx怎么用呀? (事件篇)
  12. PHP对MySQL数据库的相关操作
  13. udev实现热插拔
  14. Windows和Office激活工具Kmsauto Net
  15. JAVA 编程思想第一章习题
  16. Binary Search Tree Learning Summary
  17. Django和SQLAlchemy,哪个Python ORM更好?
  18. find,xargs,tar有选择打包
  19. bzoj1935
  20. Struts2 核心流程

热门文章

  1. py库: Tesseract-OCR(图像文字识别)
  2. Android 组合控件
  3. Flex学习笔记-使用MXML和一个AS事件监听器监听事件
  4. 将tgz文件解压到指定目录
  5. Oracle查询表结果添加到另一张表中
  6. 机器学习进阶-目标跟踪-KCF目标跟踪方法 1.cv2.multiTracker_create(构造选框集合) 2. cv2.TrackerKCF_create(获得KCF追踪器) 3. cv2.resize(变化图像大小) 4.cv2.selectROI(在图像上框出选框)
  7. UI5-学习篇-5-SAP创建OData服务-Structure
  8. const 关键字总结
  9. webpack 引用vconsole
  10. YCSB性能测试工具使用(转)