我目前正在开发游戏的菜单系统,我有屏幕和屏幕元素的标准层次结构。 (屏幕包含一些屏幕元素集合)。我希望屏幕元素将事件发送到屏幕类以声明它已被选中。但是,在这种情况下我不需要任何事件参数。我不确定在没有任何参数的情况下创建事件的语法是什么。我找到了一个将播放器索引作为事件参数传递的解决方案。 (我的游戏严格来说是单人游戏,所以这不是必需的。)
public event EventHandler<PlayerIndexEventArgs> Selected;
^ - 如何在EventIndexEventArgs从EventArgs继承的地方声明此事件。我可以省略PlayerIndexEventArgs,还是有默认类型在这里使用不发送参数? (也许只是EventArgs基类?)
答案 0 :(得分:49)
您可以使用Action代理。这比使用您永远不需要的数据(我的意思是EventArgs)更优雅。
在这里定义事件:
public event Action EventWithoutParams;
public event Action<int> EventWithIntParam;
在这里你发射事件:
EventWithoutParams();
EventWithIntParam(123);
您可以在Action或Action<T>找到所需的所有信息。
这些事件中的任何一个都可以使用no-op委托... = delegate { };
进行初始化,这样您就不需要在触发事件之前检查null。
答案 1 :(得分:9)
尝试:
public event EventHandler Selected;
然后打电话给..
Selected(null, EventArgs.Empty);
这样它就是默认的事件定义,如果你不想要,你不需要传递任何信息。
答案 2 :(得分:2)
你可以写:
public event EventHandler Selected;
答案 3 :(得分:0)
答案 4 :(得分:0)
按照您提到的PlayerIndexEventArgs
类型,我假设您正在使用XNA,对吧?如果是这样,请查看Game State Management示例。如果不是,代码可能会帮助您了解如何执行此操作。