J'ai une classe 'KeyEvent'; l'un des membres qui est:Utilisation de délégués avec des arguments
public delegate void eventmethod(object[] args);
et le procédé adopté pour l'objet dans le constructeur est stocké dans le membre:
private eventmethod em;
Constructor:
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;
}
La méthode 'MéthodeEvénement' est ensuite appelé en utilisant la méthode publique "ThrowEvent":
public void ThrowEvent() {
if (!repeat && thrown) return;
em.DynamicInvoke(args);
this.thrown = true;
}
Pour autant que je puisse voir, cela compile bien. Mais lorsque j'essaie de créer une instance de cette classe (KeyEvent), je fais quelque chose de mal. Voilà ce que j'ai jusqu'à présent:
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 ne fait rien pour le moment, mais ressemble à ceci:
static public void ChangeSquareSpeed(Vector2 squarespeed) {
}
Quoi qu'il en soit, la ligne erronée est celle-ci:
KeyEvent KeyEvent_W = new KeyEvent(keys, new KeyEvent.eventmethod(GameBase.ChangeSquareSpeed), args);
l'erreur que le compilateur me donne est:
erreur CS0123: Aucune surcharge pour les matchs délégué « ChangeSquareSpeed » « BLBGameBase.KeyEvent.eventmethod »
Ma question est la suivante: Est-ce que cela signifie que je dois changer ChangeSquareSpeed prendre aucun paramètre (dans ce cas, ce qui est mieux ou est-ce que je fais quelque chose de syntaxiquement faux?
Merci d'avance.
Dans ce cas cependant, comment vais-je utiliser l'objet passé à squarespeed en tant que vecteur? Je veux seulement utiliser un Vector2 dans ChangeSquareSpeed - n'y a-t-il pas de meilleure solution? – Xenoprimate
@Motig, voir ma mise à jour. Je ne peux pas vraiment dire si vous voulez un tableau de Vector2 ou simplement un objet Vector2 comme argument de KeyEvent. –
Mm, ce serait approprié, mais j'ai besoin du délégué eventmethod pour être flexible. Dans ce cas, je l'utilise pour passer un Vector2, mais je peux aussi le passer à tout autre chose, en fonction de ce que l''événement' à appeler est exactement. – Xenoprimate