У меня есть класс '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;
}
Затем вызывается метод eventmethod с помощью открытого метода ThrowEvent:
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, чтобы он не принимал никаких параметров (в таком случае, как лучше это сделать?), Или я делаю что-то синтаксически неправильно?
Заранее спасибо.