use*_*r65 3 c# reflection events
这是我的问题/场景
public class TestEventArgs : EventArgs
{
public int ID { get; set; }
public string Name { get; set; }
}
public event EventHandler<TestEventArgs> TestClick
Run Code Online (Sandbox Code Playgroud)
如何使用反射在TestClick上附加EventHandler?(obj是实例,Activator.CreateInstance)
EventInfo eventClick = obj.GetType().GetEvent("TestClick");
Delegate handler = Delegate.CreateDelegate(eventClick.EventHandlerType, obj, ????);
eventClick.AddEventHandler(obj, handler);
Run Code Online (Sandbox Code Playgroud)
我的问题是TestEventArgs是在外部dll中声明的,但是???? 上面的methodinfo需要在其委托中签名?
小智 7
我设法通过以下文章描述的技术来获取我的代码, http://www.pelennorfields.com/matt/2009/03/13/createdelegate-error-binding-to-target-method/
本质上,如果我执行以下操作,我会收到错误"绑定到目标方法的错误",
失败:
EventInfo eventClick = obj.GetType().GetEvent("TestClick");
Delegate handler = Delegate.CreateDelegate(
eventClick.EventHandlerType, this, "TestClick");
eventClick.AddEventHandler(obj, handler);
Run Code Online (Sandbox Code Playgroud)
成功:
但当我把它改为:
MethodInfo methodOn_TestClick = this.GetType().GetMethod("TestClick", new Type[] { typeof(object), typeof(EventArgs));
Delegate handler = Delegate.CreateDelegate(
event_DomClick.EventHandlerType, this, methodOn_TestClick, true); // note the change here
eventClick.AddEventHandler(obj, handler);
Run Code Online (Sandbox Code Playgroud)
然后我在TestClick方法中使用了反射,从标准的EventArgs中获取我需要的属性.
例如.
public void TestClick(object sender, EventArgs e)
{
PropertyInfo prop_ID = e.GetType().GetProperty("ID");
int id = Convert.toInt32(prop_ID.GetValue(e, null));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4378 次 |
| 最近记录: |