【发布时间】:2010-01-06 11:44:38
【问题描述】:
我有一个类'KeyEvent';其中一个成员是:
public delegate void eventmethod(object[] args);
并且在构造函数中传递给对象的方法存储在这个成员中:
private eventmethod em;
构造函数:
public KeyEvent(eventmethod D) {
em = D;
}
public KeyEvent(eventmethod D, object[] args) : this(D) {
this.args = args;
}
public KeyEvent(Keys[] keys, eventmethod D, object[] args) : this(keys, D) {
this.args = args;
}
然后使用公共方法“ThrowEvent”调用“eventmethod”方法:
public void ThrowEvent() {
if (!repeat && thrown) return;
em.DynamicInvoke(args);
this.thrown = true;
}
据我所知,这编译得很好。但是在尝试创建此类(KeyEvent)的实例时,我做错了。这是我目前所拥有的:
object[] args = {new Vector2(0.0f, -200.0f)};
Keys[] keys = { Keys.W };
KeyEvent KeyEvent_W = new KeyEvent(keys, new KeyEvent.eventmethod(GameBase.ChangeSquareSpeed), args);
GameBase.ChangeSquareSpeed 目前没有做任何事情,但看起来像这样:
static public void ChangeSquareSpeed(Vector2 squarespeed) {
}
反正错的就是这一行:
KeyEvent KeyEvent_W = new KeyEvent(keys, new KeyEvent.eventmethod(GameBase.ChangeSquareSpeed), args);
编译器给我的错误是:
错误 CS0123:“ChangeSquareSpeed”没有重载匹配委托“BLBGameBase.KeyEvent.eventmethod”
我的问题是:这是否意味着我必须更改 ChangeSquareSpeed 以不使用任何参数(在这种情况下,有什么更好的方法?),还是我在语法上做错了什么?
提前谢谢你。
【问题讨论】: