我很好奇是否可以在事件处理程序中获取事件名称? 我很确定,有可能,你能帮我找到解决方案吗? 例如:
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();
}
}
答案 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"};