利用反射绑定事件处理程序(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);
}
}
}

时间: 2024-10-08 16:14:59

利用反射绑定事件处理程序(C#)的相关文章

利用自定义绑定事件来 传值 实现子传父数据,父传子数据

例子 用$emit  绑定自定义事件 $emit("receive",item) 然后再触发父子的自定义事件 执行函数  v-on:receive="changeValueHandle"    changeValueHandle(value){this.val = value;}  item 就是要传入父级的值,value就是接收 item的 <body> <div id="app"> <div style=&quo

06 同时给多个元素绑定事件

1 要求 同时给多个相同元素绑定相同的时间 例如:给一个无序列表中的每一个li元素绑定一个事件,单击每个li元素的时候改变背景颜色和文本颜色 2 思路 利用jQuery的on()实现同时绑定 3 准备 3.1 jQuery的 on()方法 怎么使用? 在选择元素上绑定一个或多个事件的事件处理函数. on()方法绑定事件处理程序到当前选定的jQuery对象中的元素.在jQuery 1.7中,.on()方法 提供绑定事件处理程序所需的所有功能.帮助从旧的jQuery事件方法转换,see .bind(

jquery绑定事件失效的情况(转)

原文地址:http://www.thinksaas.cn/group/topic/348453/ jQuery中文api地址:http://www.jquery123.com/api/ jQuery官网api地址:http://api.jquery.com/ 现在的web项目,不使用jquery的恐怕极少.但是在使用jquery时,也会发现一些异常的情况. 一般我们如下绑定点击等事件: <div class="music"> <ul> <li>01.

为HTML元素添加多个事件处理程序

方法一:直接在HTML代码中,为元素的onclick绑定时间(DOM 0级事件) <button onclick="alert('hello')">按钮</button> 缺点:html和js的代码杂糅,耦合度高,修改不方便 方法二:使用JavaScript的DOM编程,获取元素节点,然后绑定事件 <button id="btn">按钮</button> <script> //方案一:绑定匿名函数 docu

关于动态生成dom绑定事件失效的原因

之前做项目都是直接用jquery的bind绑定事件,不过当时都不是动态生成dom元素,而是已经页面中原本存在的dom元素进行事件绑定,最近在测试给动态生成的dom绑定事件的时候发现事件失效,于是就测试了一下: 1.事件失效的原因:(1)bind事件绑定只对dom中存在的元素有效,对于我们后来动态增加的元素是监测不到,所以绑定不了 (2)同样,当你使用var aa = document.getElementsByTagName("动态生成的元素");来获取动态生成的元素的时候也是获取不到

浅谈jquery之on()绑定事件和off()解除绑定事件

off()函数用于移除元素上绑定的一个或多个事件的事件处理函数. off()函数主要用于解除由on()函数绑定的事件处理函数. 该函数属于jQuery对象(实例). 语法 jQuery 1.7 新增该函数.其主要有以下两种形式的用法: 用法一: jQueryObject.off( [ events [, selector ] [, handler ] ] ) 用法二: jQueryObject.off( eventsMap [, selector ] ) 参数 参数 描述 events 可选/S

Event Handler 事件处理程序 2 ---跨浏览器事件对象《高程3》

0 Event Object导论 支持DOM0.DOM2的浏览器和IE浏览器实现事件处理程序的不同,除了体现在添加事件处理程序的不同上,还体现在event对象的实现差异上,包括具体的属性和方法.在触发DOM上的某个事件时,都会产生一个event对象,这个对象包含着所有与事件有关的信息.一旦事件处理程序执行完成,event对象就会被销毁.所有浏览器对event的支持方式包括:DOM事件对象和IE事件对象. 1.1 DOM0和DOM2支持的Event对象(针对IE之外的浏览器) 兼容 DOM 的浏览

Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListener为按钮绑定事件,如下所示: //1.获取控件 btn = (Button)findViewById(R.id.button1); //2.绑定事件 btn.setOnClickListener(new OnClickListener() { @Override public void onCl

IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素

IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素. attachEvent(type,listener); listener函数中的this不是指向执行当前事件的dom而是window切记,感觉这一点IE做的太奇怪了!