我正在尝试复制现有.NET XNA类事件提供的功能:NetworkSession.GamerJoined。
当事件被分配给它时,可立即引发,例如:
myNetworkSession.GamerJoined += GamerJoinedEventHandler;
void GamerJoinedEventHandler(object sender, GamerJoinedEventArgs e)
{
// If you put a beakpoint on the assignment line above and another here
// this handler is called during the assignment.
}
如果我使用NetworkSession
事件编写自己的GamerJoined
课程,我该如何实现这一目标?
答案 0 :(得分:2)
是的,您可以使用add
上下文关键字来执行此操作。
当你有这条线时:
public event EventHandler<GamerJoinedEventArgs> GamerJoined;
这是语法糖:
public event EventHandler<GamerJoinedEventArgs> GamerJoined
{
add
{
this.gamerJoined += (EventHandler<GamerJoinedEventArgs>)Delegate.Combine(this.gamerJoined, value);
}
remove
{
this.gamerJoined -= (EventHandler<GamerJoinedEventArgs>)Delegate.Remove(this.gamerJoined, value);
}
}
其中gamerJoined
是事件的私有支持字段。因此,您可以编写自己的add
来调用处理程序,例如
public event EventHandler<GamerJoinedEventArgs> GamerJoined
{
add
{
this.gamerJoined += (EventHandler<GamerJoinedEventArgs>)Delegate.Combine(this.gamerJoined, value);
value(this, new GamerJoinedEventArgs(myGamer));
}
remove
{
this.gamerJoined -= (EventHandler<GamerJoinedEventArgs>)Delegate.Remove(this.gamerJoined, value);
}
}