没有参数的C#事件。 我该如何处理它们?

我正在开发一个游戏菜单系统,我有屏幕和屏幕元素的标准层次结构。 (屏幕包含一些屏幕元素集合)。 我希望屏幕元素将事件发送到屏幕类以声明它已被选中。 但是,在这种情况下我不需要任何事件参数。 我不确定在没有任何参数的情况下创建事件的语法是什么。 我找到了一个将播放器索引作为事件参数传递的解决方案。 (我的游戏严格来说是单人游戏,所以这不是必需的。)

public event EventHandler Selected; 

^ – 如何在EventIndexEventArgs从EventArgsinheritance的地方声明此事件。 我可以省略PlayerIndexEventArgs,还是有一个默认类型可以在这里使用不发送参数? (也许只是EventArgs基类?)

您可以使用Action代理。 这比使用您永远不需要的数据(我的意思是EventArgs)要优雅得多。

在这里定义事件:

 public event Action EventWithoutParams; public event Action EventWithIntParam; 

在这里你发射事件:

 EventWithoutParams(); EventWithIntParam(123); 

您可以在Action或Action 中找到所需的所有信息。

这些事件中的任何一个都可以使用no-op委托来初始化... = delegate { }; 这样您就不需要在触发事件之前检查null。

尝试:

 public event EventHandler Selected; 

然后打电话..

 Selected(null, EventArgs.Empty); 

这样它就是默认的事件定义,如果你不想要,你不需要传递任何信息。

你可以写:

 public event EventHandler Selected; 

(也许只是EventArgs基类?)

你应该这样做。

来自EventArgs上的MSDN文档:

该类不包含事件数据; 它在事件被引发时由不将状态信息传递给事件处理程序的事件使用。

按照你提到的PlayerIndexEventArgs类型,我假设你正在使用XNA,对吧? 如果是这样,请查看Game State Management示例。 如果不是,代码可能会帮助您了解如何执行此操作。