2009-07-09 4 views
6

Ich verstehe, dass das Überschreiben einer Methode/Funktion ihre Implementierung in der abgeleiteten Klasse von ihrer Implementierung in der Basisklasse neu definiert.Soll ich die Basisklassenimplementierung beim Überschreiben einer Methode in C# für ASP.NET aufrufen?

Nun, was mich verwirrt, ist, wenn ich eine Klasse in ASP.NET außer Kraft setzen, wie CreateChildControls() (ich es zufällig ohne besonderen Grund gepflückt), VS2008 Auto erzeugt:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
} 

Genügend, die Umsetzung Standard ruft nur die Basisklasse CreateChildControls() auf.

Also, wenn ich einige Code ausgeführt werden soll, da ich weiß nicht, wie base.CreateChildControls(), sollte ich dies tun:

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
    base.CreateChildControls(); 
} 

oder, ignorieren, was base.CreateChildControls() zusammen und tun nur

protected override void CreateChildControls() 
{ 
    /*My Code Here*/      
} 

Antwort

11

Das ist wie du willst. Im Allgemeinen möchten Sie die Basisklasse-Methode aufrufen, weil sie eine Menge Dinge tun könnte, in die Sie nicht eingeweiht sind (besonders in einer Klasse, die Sie nicht kontrollieren.) Kontrollieren Sie es. Aber wenn Sie sehr zuversichtlich sind Sie brauchen (oder wollen) nicht, dass die Basisklasse "stuff" passiert, Sie können den Aufruf entfernen.

+0

Es ist wirklich überraschend für mich, dass Sie eine Basisklasse überschreiben dürfen, die Sie nicht kennen. – Matt

+7

Ich muss diese Freiheit haben. Nur weil ich dein Kind bin, heißt das nicht, dass ich alles so machen will wie du. Manchmal muss ich in die Welt gehen und Dinge auf meine eigene Art tun. Sie wären ein überfürsorglicher Elternteil, wenn Sie mich zu Ihrer Implementierung zwingen würden. :) –

+0

Ausgehend von der Tatsache, dass ich die Basisklasse beim Überschreiben in meiner benutzerdefinierten 'Control' aufrufen, in Bezug auf' OnXxxx' überschreibt ich am Ende meiner abgeleiteten Methode, dass ich 'base.OnXxxx' nenne. Gibt es eine Faustregel, ob 'base.CreateChildControls' am Anfang oder am Ende der abgeleiteten Methode aufgerufen wird? – superjos

3

Es ist einfach eine Frage, ob Sie das Verhalten vollständig ersetzen oder Verhalten hinzufügen möchten.

Für etwas wie CreateChildControls, werden Sie wahrscheinlich den Aufruf der Basisklasse beibehalten.

1

es hängt davon ab, was Sie tun möchten. Wenn Sie möchten, dass die Methode base.CreateChildControls() aufgerufen wird und Sie anschließend eine benutzerdefinierte Aktion vor oder nach dem Aufruf der Methode ausführen möchten, können Sie dies tun.

Wenn Sie vollständige Kontrolle darüber haben wollen, was passiert, wenn CreateChildControls aufgerufen wird, können Sie es einfach ignorieren, es vollständig aufzurufen.

Die Tatsache, dass es standardmäßig dort ist, ist nur ein bisschen Anleitung für Sie.

0

Es hängt davon ab, wenn Sie wollen oder vollständige die Basisimplementierung ersetzen ... in den meisten Fällen sollten Sie die Basisimplementierung aufrufen (und Sie sollten es auf jeden Fall tun, im Falle des CreateChildItems Methode ...)

0

Vielleicht möchten Sie einen Blick auf die template method Muster werfen. Sie können zwar nichts mit der Art und Weise tun, wie die Bibliotheksklassen implementiert werden, aber es kann Ihnen dabei helfen, sicherzustellen, dass der von Ihnen geschriebene Code einfach zu verwenden ist.

Verwandte Themen