C# 如何在分配新处理程序时引发事件?
我正在尝试复制现有.NET XNA类的事件提供的功能: 当事件分配给它时,可以立即引发,例如:C# 如何在分配新处理程序时引发事件?,c#,events,.net-4.0,C#,Events,.net 4.0,我正在尝试复制现有.NET XNA类的事件提供的功能: 当事件分配给它时,可以立即引发,例如: myNetworkSession.GamerJoined += GamerJoinedEventHandler; void GamerJoinedEventHandler(object sender, GamerJoinedEventArgs e) { // If you put a beakpoint on the assignment line above and another her
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
事件,如何实现这一点?是的,您可以使用上下文关键字来实现
当您有电话线时:
public event EventHandler<GamerJoinedEventArgs> GamerJoined;
如果您在事件处理程序方法中使用了一个副作用,那么直接调用它就可以了,您不需要XNA来为您做这件事。很可能您必须对其进行重构,并将一些代码移动到私有方法中,因为构建有效的GamerJoinedEventArgs实例应该很困难。@HansPassant我正在编写该类的实现,因此为XNA one编写的用户代码将仅使用我的代码即可。然后,这就是代码气味。有些客户端代码想知道玩家何时加入网络,但你不知道这些代码是什么样子,这并不意味着玩家确实加入了网络。也许我关心的是兼容性,甚至微软的示例也依赖于这种行为。它所做的是为所有在客户端订阅事件之前加入的玩家发起事件,请参阅文档。非常好。我从来没用过
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);
}
}
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);
}
}