将额外参数传递给具有反射的事件

时间:2016-08-03 10:55:04

标签: c# reflection delegates

我使用反射将事件从webcontrols绑定到我自己的方法。这是一个通用函数,因此我事先并不知道控件或事件的类型,但事件是例如click(按钮)或selectedIndexChanged(下拉列表)。我的功能如下:

protected void BindEvents(WebControl ctrl, string methodName, string eventType)
{
    System.Reflection.EventInfo eventInfo = ctrl.GetType().GetEvent(eventType);
    Delegate handler = Delegate.CreateDelegate(eventInfo.EventHandlerType, this, methodName);
    eventInfo.AddEventHandler(ctrl, handler);
}

我需要通过传入一个额外的参数来知道哪个事件触发了MyEvent(见下文)。这很重要,因为每个webcontrol都可以有许多调用MyEvent的事件。

//1. Standard event signature
protected void Test_Click(object sender, EventArgs e) { } 

//2. Signature for my event
protected void MyEvent(object sender, EventArgs e, string eventName) { }

创建委托时不允许使用不同的签名,代码仅在删除最后一个参数string eventName时有效。我通过将eventName设置为默认参数尝试了一种解决方法。我也试过继承EventArgs,但我不允许对标准签名进行任何更改。我可以覆盖控制事件以适应我的签名,但我认为必须有一个更简单的方法。

使用反射时,有什么办法可以将这个额外的参数传递给函数吗?

1 个答案:

答案 0 :(得分:1)

这就是诀窍,虽然它不是很漂亮:

heroku run ...