2013-05-02 7 views
7

Wo sollte ich mich innerhalb meiner Unterklasse auf eine geerbte geschützte nicht-virtuelle Methode wie this.Method() oder base.Method() beziehen?dies. vs Basis. für geerbte geschützte nicht-virtuelle Methoden?

Mit this würde ich leicht die Methode mit einer neuen Methode mit dem gleichen Namen zu verbergen. Sollten Aufrufe an die Methode explizit base spezifizieren, nur wenn sichergestellt ist, dass nur die Implementierung der Basisklasse spezifisch aufgerufen werden muss?

+1

sollten Sie this.Method() immer aufrufen, wenn Sie aufrufen und einen Aufruf von base :: Method() innerhalb der implementierten überschriebenen Methoden innerhalb der abgeleiteten Klasse ausführen. Auf diese Weise in der Zukunft, wenn Sie etwas überschreiben, müssen Sie nicht um eine Basis gehen. Method(); –

+0

Es ist keine virtuelle Methode und kann nicht überschrieben werden. Nicht-virtuelle Methoden können nur versteckt werden. – Monstieur

+2

Warum bezeichnen Sie es nicht einfach als 'Methode()'? Wenn 'this' das mit seiner eigenen' Method() 'verbirgt, dann wird das aufgerufen. Wenn nicht, wird 'base.Method()' aufgerufen. Dies wurde als Standardverhalten ausgewählt. wahrscheinlich aus guten Gründen.^_^^ – Corak

Antwort

2

Rufen Sie immer this.Method() an.

Wenn Sie die Methode ausblenden, möchten Sie wahrscheinlich die neue Methode anstelle der in der Basisklasse aufrufen. Auf der anderen Seite, wenn Sie die Methode der Basisklasse virtuell machen, werden Sie wahrscheinlich Ihren Code auf polymorphe Weise aufrufen lassen wollen.

Es ist schwer, die Zukunft vorherzusagen, aber diese Szenarien scheinen eher zu passieren.

7

Wenn Sie jemals ein Mitglied mit dem Namen Method in Ihrer Unterklasse hinzufügen und trotzdem die geerbte Methode aufrufen möchten, sollten Sie base.Method() verwenden. Das Hinzufügen von Elementen mit dem Namen Method in abgeleiteten Klassen ändert nicht die Bedeutung von this.Method() Aufruf.