Frage

In meinem code hinter ich Draht bis mein Ereignisse wie folgt:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    btnUpdateUser.Click += btnUpateUserClick;
}

Ich habe es getan, auf diese Art, weil das ist, was ich gesehen habe in den Beispielen.

  • Hat die base.OnInit () - Methode aufgerufen werden müssen?
  • Es wird implizit aufgerufen werden?
  • Ist es besser, nennen Sie es an den Anfang der Methode oder am Ende?
  • Was wäre ein Beispiel, wo die Verwirrung über die Basis-Methode können Sie in Schwierigkeiten?
War es hilfreich?

Lösung

Ich sollte klarstellen:

Die Leitlinien empfehlen, dass das auslösen eines Ereignisses einbezogen werden sollten Aufruf einer virtuellen ", AufEventName"Methode, aber Sie sagen auch, dass, wenn eine abgeleitete Klasse überschreibt die Methode und vergisst, rufen die basismethode, die Veranstaltung sollte noch Feuer.

Siehe "Wichtiger Hinweis" etwa auf halbem Weg nach unten diese Seite:

Abgeleitete Klassen überschreiben geschützte virtuelle Methode, die nicht erforderlich sind, zu nennen, die Implementierung der Basisklasse.Die Basisklasse muss weiterhin funktionieren, auch wenn Ihre Umsetzung nicht genannt.

Andere Tipps

In diesem Fall, wenn Sie nicht rufen Sie den base OnInit, dann die Init noch nicht ausgelöst.

Im Allgemeinen ist es am besten, IMMER rufen Sie das Basis-Methode, wenn Sie speziell wissen, dass Sie nicht möchten, dass die base-Verhalten auftreten.

Ob seine sogenannten am Beginn oder am Ende hängt davon ab, wie Sie wollen, dass Dinge funktionieren.In einem Fall wie diesem, wo Sie ein überschreiben statt Einhaken einen event-handler, nannte es zu Beginn der Methode mehr Sinn macht.So, Ihr code wird ausgeführt, nachdem alle Handler, die macht es mehr emulieren einem "normalen" event-handler.

Obwohl die offizielle framework-design-Richtlinien empfehlen, ansonsten sind die meisten Klasse Designer wird tatsächlich das OnXxx () - Methode verantwortlich für das brennen der eigentlichen Veranstaltung, wie diese:

protected virtual void OnClick(EventArgs e)
{
    if (Click != null) Click(this, e);
}

...also, wenn Sie Erben von der Klasse und nicht call-Basis.OnClick(e), das Click-Ereignis wird nie ausgelöst.

Also ja, auch wenn dies sollte nicht werden Sie den Fall nach den offiziellen Richtlinien zum design, ich denke, es lohnt sich, den Aufruf base.OnInit(e) nur um sicher zu sein.

offizielle framework-design-Richtlinien empfehlen, sonst

Sie tun?Ich bin neugierig, ich habe immer gedacht, das Gegenteil, und Lesen Framework-Design-Richtlinien und ausgeführt FxCop hat nur zementiert meiner Sicht.Ich war unter dem Eindruck, dass die Ereignisse sollten immer gefeuert von virtuellen OnXxx () - Methoden, die einen EventArgs-parameter

Sie sind wahrscheinlich besser dran, es zu tun, so dieser Debatte geht Weg.Der Artikel ist interessant, vor allem, wenn man bedenkt, dass der .NET Framework keine Ehre dieser Leitlinie.

@Ch00k und @Scott, ich weiß nicht - ich mag die, die AufEventName pattern mich.Und ja, ich bin einer der Menschen, die schuldig sind, feuern Sie die Veranstaltung aus, die Methode.

Ich denke, das überschreiben der Auf* Methode und aufrufen der base ist der Weg zu gehen.Handhaben Sie Ihre eigenen Ereignisse scheint irgendwie falsch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top