没有参数的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示例。 如果不是,代码可能会帮助您了解如何执行此操作。