In C # mit einem geerbten Klassensatz - sollten wir beim Aufrufen einer Methode die Schlüsselwörter 'base.methodname und this.methodname' verwenden ... unabhängig davon, ob es sich um eine überschriebene Methode handelt oder nicht?
Der Code wird wahrscheinlich Änderungen in Bezug auf die Logik erfahren, und möglicherweise treten zu einem späteren Zeitpunkt einige IF-ELSE-ähnliche Bedingungen auf. Zu diesem Zeitpunkt muss der Entwickler gezwungen sein, jede Codezeile erneut zu besuchen und sicherzustellen, dass er die richtige Wahl trifft, welche Methode aufgerufen wird --- base.methodname () oder this.methodname () ELSE the. Das NET-Framework ruft DEFAULT auf (ich denke, es ist base.methodname ()) und die gesamte Logik kann einen Wurf ausführen.
quelle
Antworten:
Die Verwendung des
base
Schlüsselworts ist keine Frage der Präferenz, sondern der Korrektheit. Wenn Sie die Basisklassenimplementierung in überschriebenen Methode aufrufen möchten, Sie müssen verwendenbase
. Wenn Sie das nicht aufrufen möchten, können Sie es nicht verwendenbase
.Das
this
Schlüsselwort hingegen ist in den meisten Fällen eine Frage der Präferenz. Ich denke, es macht den Code nur unnötig unübersichtlich, deshalb benutze ich ihn nicht, wenn ich nicht muss. Es ist nützlich, wenn Sie einen Methodenparameter mit demselben Namen wie Feld (oder Eigenschaft) haben. Ich würdethis
in einem solchen Fall verwenden. Wenn ich jedoch neuen Code schreibe, verwende ich in der Regel Namenskonventionen, die dieses Problem vermeiden.quelle
this
wie angenommen weglassen . Bei größeren Projekten, bei denen ich Nachwuchskräfte haben werde (möglicherweise sogar Neueinstellungen), verwenden wir diese Schlüsselwörter standardmäßig, damit der Umfang unabhängig von der Erfahrung des Programmierers sofort ersichtlich ist.base
aufrufen, obwohl sie semantisch falsch ist?this
ist ungefähr so grundlegend wie es nur geht. Wenn Programmierer den Umfang der Methoden (und den implizitenthis.
Zugriff von Objektmitgliedern, auch wenn sie nicht explizit geschrieben wurden) noch nicht verstehen , müssen sie lernen. Das liegt an ihnen .this
aber wirklich grundlegend. Es wird erwartet, dass Sie jede Stufe der Programmierleiter kennen.Ich würde vorschlagen, dass Sie ein ernstes Problem mit der Logik und der Lesbarkeit haben, wenn Sie explizit eine Basismethode aus einer Klasse aufrufen, in der diese Methode überschrieben wird.
base
sollte eigentlich nur dort erscheinen, wo die Basisimplementierung einer überschriebenen Methode von dieser überschriebenen Methode aufgerufen wird.Überall sonst sollte es sein
this
(wenn die Methode nicht überschrieben wird, geht sie trotzdem in die Basisklasse) und es ist nichts Falsches daran, dem Compiler zu erlauben, darauf zu schließen.quelle
this
Schlüsselwort: Es gibt keine feste Regel, um einthis
Schlüsselwort anzuwenden, da es eine persönliche Präferenz ist, aber Ihr Code könnte unübersichtlich werden.Vor- und Nachteile der Verwendung dieses Schlüsselworts in C #
base
Schlüsselwort (Wiederverwendbarkeit): Es gibt bereits Antworten auf die Verwendung von base. Ich möchte einen Punkt hinzufügen.Gemeinsame Funktionen für alle abgeleiteten Klassen werden in der Basisklasse bereitgestellt, und Sie können die Basismethode aufrufen, gefolgt von der spezifischen Implementierung in der Methode in der abgeleiteten Klasse, um die Wiederverwendbarkeit zu erreichen.
quelle
Zusätzlich können Sie "this" verwenden, wenn Sie eine Erweiterungsfunktion aufrufen.
Sie können nicht tun:
aus dem Inneren des MyClass-Körpers. Nur:
Es gibt keinen wirklichen Grund, statische Erweiterungen für die von Ihnen erstellte Klasse zu erstellen. Das einzige Szenario, in dem es für mich nützlich war, war, als ich Erweiterungsfunktionen hatte, die auf der Schnittstelle basierten, die meine Klasse implementiert, und nicht auf der Klasse selbst.
quelle
Ich würde empfehlen, das
this.
Präfix zu löschen, außer in Fällen, in denen es Symmetrie hinzufügt. Z.B:quelle