如何在事件处理程序中获取事件名称
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();
}
}
您需要继承EventArgs
class并添加必要的字段。
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();
}
我很好奇是否可以在事件处理程序中获取事件名称? 我很确定,这是可能的,你能帮我找到解决办法吗? 例如:
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();
}
}
您需要继承EventArgs
class并添加必要的字段。
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();
}