OnXXX Methoden wozu ?
-
Bei verschiedenen .NET Klassen, gibt es Methoden die mit "On" beginnen, zB OnPaint oder OnClick. Wozu sind Sie gut ? Was unterscheidet sie von ( "einfachen" ) Event-Händlern ? zB von ( "einfach" ) void Form1_Paint(Object sender, PaintEventArgs e) ... . Und OnXXX-Methode: protected override void OnPaint(PaintEventArgs e) ... base.OnPaint(e) ... . Wieso ruft man noch "base.OnPaint(e)" auf ? Hat jemand eine Erklärung ? Im Voraus vielen Dank !
-
Die OnX-Methoden lösen das eigentliche Event aus. Da Events vorher auf != null geprüft werden müssen, habe die NET-Entwickler den stets gleichen Code in Methoden ausgelagert.
Außerdem führen viele OnX-Methoden, neben dem Auslösen des Events, noch weiteren Code aus der für die jeweilige Aktion wichtig ist. Überschreibt man also eine solche Methode ist es sinnvoll base.OnX aufzurufen.
-
Das ist ein nettes Beispiel aus System.Windows.Control
protected virtual void OnForeColorChanged(EventArgs e) { if (this.GetAnyDisposingInHierarchy()) { return; } this.Invalidate(); EventHandler eventHandler = base.Events[Control.EventForeColor] as EventHandler; if (eventHandler != null) { eventHandler(this, e); } Control.ControlCollection controlCollection = (Control.ControlCollection)this.Properties.GetObject(Control.PropControlsCollection); if (controlCollection != null) { for (int i = 0; i < controlCollection.Count; i++) { controlCollection[i].OnParentForeColorChanged(e); } } }
Hier wird erst das ForeColorChanged-Event ausgelöst. Falls das Control Child-Controls besitzt, müssen die ebenfalls alle über die geänderte Forecolor informiert werden.
Zum einen wurde der Code nach dem OnX-Schema ausgelagert, zum anderen muss ein abgeleitetes Control (wenn es diese Methode überschreibt und Childs besitzt) base.OnForeColorChanged aufrufen, damit die Child-Controls informiert werden.