如何创建动态方法来处理事件?

时间:2016-07-01 02:59:27

标签: c# dynamicmethod

在C#中,如何创建可用于处理事件的动态方法?

这是一个事件:

public event EventHandler<EventArgs> refresh;

这是一种方法:

public void Test()
{

}

如何动态创建处理刷新事件的方法,以便动态方法调用Test方法?

上面的测试方法是要调用的方法的一个示例。

2 个答案:

答案 0 :(得分:0)

好吧,你可以直接订阅这个活动。

public class SomeClass
{
    public event EventHandler<EventArgs> refresh;
}

public void Test()
{
}

void Main()
{
    var some = new SomeClass();
    some.refresh += (sender, e) => Test();
    // or
    some.refresh += Refreshed;
}

void Refreshed(object sender, EventArgs e)
{
    Test();
}

答案 1 :(得分:0)

如果要调用的方法是某个类中的实例方法,并且您拥有该类的实例和方法的名称,则可以使用Delegate.CreateDelegate()创建该方法的委托,然后使用一个lambda在事件处理程序中调用它:

static EventHandler<EventArgs> CreateHandler(object methodObject, string methodName)
{
    var methodDelegate =
        (Action)Delegate.CreateDelegate(typeof(Action), methodObject, methodName);

    return (s, e) => methodDelegate();
}

用法可以如下所示(假设TestC类中):

refresh += CreateHandler(new C(), "Test");

refresh(this, EventArgs.Empty);