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.


Anmelden zum Antworten