如果有,说明这一点我不能够找到它道歉另一个问题,但我认为这可能与我的不熟悉一些涉及我想要做的条款做。
我正在试图做的是按名称的事件处理程序添加到按钮。 因此,例如,在下面的代码,而不是知道我要添加showInfo,我可以通过名称引用(字符串),如“showInfo”的事件处理程序?
myButton.Click += new EventHandler(showInfo);
void showInfo(object sender, EventArgs e)
{
// ..
}
如果有,说明这一点我不能够找到它道歉另一个问题,但我认为这可能与我的不熟悉一些涉及我想要做的条款做。
我正在试图做的是按名称的事件处理程序添加到按钮。 因此,例如,在下面的代码,而不是知道我要添加showInfo,我可以通过名称引用(字符串),如“showInfo”的事件处理程序?
myButton.Click += new EventHandler(showInfo);
void showInfo(object sender, EventArgs e)
{
// ..
}
您可以从通过反射的方法的委托,然后通过反射订阅,为的情况下,是的。 示例代码:
using System;
using System.Reflection;
class Publisher
{
public event EventHandler Foo;
public void RaiseFoo()
{
EventHandler handler = Foo;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
class Subscriber
{
public void HandleEvent(object sender, EventArgs e)
{
Console.WriteLine("In HandleEvent");
}
}
class Test
{
static void Main()
{
var subscriber = new Subscriber();
var publisher = new Publisher();
var methodInfo = typeof(Subscriber).GetMethod("HandleEvent");
var handler = (EventHandler) Delegate.CreateDelegate(
typeof(EventHandler), subscriber, methodInfo);
var eventInfo = typeof(Publisher).GetEvent("Foo");
eventInfo.AddEventHandler(publisher, handler);
publisher.RaiseFoo();
}
}