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

How to get event name in event handler

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

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();
    }
}

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

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"};

I'm curious if is possible to get event name in event handler?

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

可以做的是:

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();
}