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

时间:2009-11-06 18:01:32

标签: c# events

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

public event EventHandler<PlayerIndexEventArgs> Selected;

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

5 个答案:

答案 0 :(得分:49)

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

在这里定义事件:

public event Action EventWithoutParams;
public event Action<int> EventWithIntParam;

在这里你发射事件:

EventWithoutParams();
EventWithIntParam(123);

您可以在ActionAction<T>找到所需的所有信息。

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

答案 1 :(得分:9)

尝试:

public event EventHandler Selected;

然后打电话给..

Selected(null, EventArgs.Empty);

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

答案 2 :(得分:2)

你可以写:

public event EventHandler Selected;

答案 3 :(得分:0)

  

(也许只是EventArgs基类?)

你应该这样做。

来自EventArgs上的MSDN文档:

  

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

答案 4 :(得分:0)

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