如何在事件处理程序中获取事件名称

时间:2015-02-04 11:51:41

标签: c# .net

我很好奇是否可以在事件处理程序中获取事件名称? 我很确定,有可能,你能帮我找到解决方案吗? 例如:

public class Boy
{
    public event EventHandler Birth;
    public event EventHandler Die;
}

public class Mother
{
    public Mother()
    {
        Boy son = new Boy();
        son.Birth += son_Handler;
        son.Die += son_Handler;
    }

    void son_Handler(object sender, EventArgs e)
    {
        // how to get event name (Birth/Die)?
        throw new NotImplementedException();
    }
}

2 个答案:

答案 0 :(得分:5)

  

我很好奇是否可以在事件处理程序中获取事件名称?

不,不是。事件处理程序只是一种方法。它可以直接调用,而不是在任何事件的上下文中调用。

可以做的是:

public Mother()
{
    Boy son = new Boy();
    son.Birth += (sender, e) => Handler("Birth", sender, e);
    son.Die += (sender, e) => Handler("Die", sender, e);
}

void Handler(string description, object sender, EventArgs e)
{
    Log("I'm in the {0} event", description);
    throw new NotImplementedException();
}

答案 1 :(得分:-2)

您需要继承EventArgs类并添加必要的字段。

class MyArgs : EventArgs
{
    public string What { get; set; }
}

delegate void MyHandler(object sender, MyArgs e);

. . .

var myEvent = birthEvent;
if (myEvent != null)
    myEvent(new MyArgs { What = "Birth"};