11 Stimmen

Virtuelle Methode außer Kraft setzen oder Ereignishandler erstellen?

Ich habe mir gerade die XNA-Dokumentation für das Programm Spiel-Klasse und stellte fest, dass es eine Deactivated Ereignis und ein OnDeactived virtuelle Methode, die man außer Kraft setzen kann.

Sowohl das Erstellen eines Eventhandlers für die Deactivated Ereignis und Überschreiben der OnDeactived Die virtuelle Methode ermöglicht es dem Client, das Spiel zu steuern, wenn es den Fokus verliert.

Ich habe mich gefragt, welcher Ansatz im Allgemeinen verwendet werden sollte, wenn das Spiel den Fokus verliert. Erstellen eines Event-Handlers oder Überschreiben der virtuellen Methode? Gibt es irgendwelche Unterschiede zwischen den einzelnen Ansätzen?

10voto

Jon Skeet Punkte 1325502

Es gibt zwei offensichtliche Unterschiede:

  • Sie können nur überschreiben OnDeactivated innerhalb einer Klasse, die von der Klasse abgeleitet ist, die das Ereignis deklariert hat - bloßer "anderer" Code kann das Ereignis nur verwenden
  • Unter OnDeactived entscheiden Sie selbst, ob Sie anrufen wollen oder nicht. base.OnDeactivated - können Sie das Ereignis effektiv unterdrücken oder die Parameter ändern, es vor oder nach Ihrem eigenen Code aufrufen usw.

Wenn Sie bereits von der Klasse ableiten, würde jeder Weg funktionieren - persönlich würde ich wahrscheinlich das Ereignis mehr als oft nicht verwenden, es sei denn, ich wollte alle nehmen andere eine Aktion, die nur durch Überschreiben durchgeführt werden kann. Abgesehen von allem anderen macht das den Code portabler, wenn man ihn an einen anderen Ort verschieben möchte. Andererseits bin ich sowieso kein Fan von Vererbung, also bin ich voreingenommen :)

2voto

James Johnson Punkte 44864

Die Entscheidung, ob die Methode außer Kraft gesetzt oder der Event-Handler verwendet werden soll, hängt oft davon ab, wie viel Kontrolle Sie über das Geschehen während der Ausführung der Methode haben möchten. Wenn Sie die Methode überschreiben, haben Sie die volle Kontrolle über die Methode, während der Ereignishandler erst nach der Ausführung der Methode ausgeführt wird.

Wenn Sie ein hohes Maß an Kontrolle darüber benötigen, was während dieser Methode geschieht, würde ich empfehlen, die Methode zu überschreiben. Wenn Sie einfach etwas Code nach der Ausführung der Methode ausführen müssen, würde ich den Event-Handler verwenden.

protected override void OnDeactivated(EventArgs e)
{
    //run some code before execution (anything that could effect execution)

    //call the base method and fire the event
    base.OnDeactivated(e);

   //run some code after execution
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X