Es wird empfohlen, in C# statt eines neuen Schlüsselworts eine Überschreibung zu verwenden. Warum diese Regel?Wie wählt man in C# zwischen Neu und Override?
Antwort
"neu" bedeutet, dass Sie zwei völlig verschiedene Methoden haben, was die CLR betrifft - sie haben zufällig denselben Namen, aber sie sind in Bezug auf die Vererbung nicht verwandt. Das bedeutet, wenn Sie:
Base b = new Derived();
Derived d = new Derived();
b.MyMethod(); // Calls Base.MyMethod
d.MyMethod(); // Calls Derived.MyMethod
Dies kann für einige sehr schwer zu verstehen Code machen.
Normalerweise, wenn Sie verschiedene Methoden möchten, rufen Sie sie verschiedene Dinge. Der normale Grund, denselben Namen (und dieselbe Signatur) zu verwenden, besteht darin, das Verhalten der Methode einer Basisklasse zu überschreiben. An diesem Punkt haben Sie keine andere Wahl, als den Namen/die Signatur gleich zu halten.
Ich versuche immer noch herauszufinden, was der Anwendungsfall für "neu" ist, abgesehen von schrecklichen Hackereien.
Dies ist eigentlich nicht ein Wahl Sie haben. Dies wird Ihnen jedoch auferlegt, indem Sie die Basisklasse erstellen. Wenn es eine Methode mit dem gleichen Namen gibt und diese als "virtual" markiert ist, solltest du override verwenden, außer du möchtest einige ernsthaft lustige Fehler auftauchen lassen, wenn Leute anfangen, Objekte deiner Klasse in die Basisklasse zu werfen ...
Wenn diese Methode jedoch NICHT als "virtuell" gekennzeichnet ist, kann die neue Methode nur mit dem Schlüsselwort "new" erstellt werden. Beachten Sie jedoch, dass dies keine Methodenaufrufe ersetzt, bei denen der Verweis von typeof (Basisklasse) auf Ihre Methode verweist. Also ist das meistens nur syntaktischer Zucker, um eine neue Methode mit dem gleichen Namen und der gleichen Signatur zu erstellen ...
Obwohl wenn Code auf dein Eisen trifft ist es nichts anderes als eine völlig andere Methode mit dem gleichen Namen und der gleichen Signatur. Wo eine überschriebene Methode wird -Ihre neue Methode jeden einzelnen Anruf einschließlich der in der Basisklasse Montage ersetzen ...
So sie zu vergleichen ist wie Autos zu vergleichen und ERRH ... Vögel oder etwas ..
- 1. Wie wählt man den Datumsbereich in C#?
- 2. Wie wählt man zwischen Klammern (oder Anführungszeichen oder ...) in Vim?
- 3. Override-Funktion in C++
- 4. Wie wählt man jedes Jahr zwischen zwei Jahren in mysql?
- 5. Override Klassenoperator neu und löschen, ohne die Klasse zu ändern
- 6. Wie wählt man monatliche und jährliche Termine?
- 7. LINQ: Differenz zwischen 'c Wählen Sie' und 'neu auswählen (c ...'
- 8. Wie wählt man die Zeichenfolgen zwischen dem textbox.contain() Code?
- 9. Wie wählt man Knoten mit XPath in C#?
- 10. Wie wählt man die Listbox mit Querystring in C#
- 11. Wie werden virtuelle und Override-Funktionen in Multilevel-Vererbung C#
- 12. Wie man Kamera-App imitiert - Override-Orientierungswechselanimation?
- 13. Android Studio Instant Run - Override und vollständige App neu erstellen
- 14. Wie man "Cherry-Pick" -Elemente wählt und sie innerhalb des DOM neu positioniert?
- 15. Wie wählt man DbConfigurationType programmatisch?
- 16. Objective-C-Äquivalent von "override" in C#
- 17. Wie wählt man Registerkarten in ionischen 2?
- 18. Wie wählt man alle Faktorvariablen in R
- 19. Wie wählt man Spaltennamen dynamisch in mySQL
- 20. Wie wählt man dynamische Knoten in Polymer?
- 21. Wie konvertiert man in C# Zahlen zwischen hexadezimal und dezimal?
- 22. Override .ToString Methode C#
- 23. Unterschied zwischen Verdrahtungsereignissen mit und ohne "Neu"
- 24. Wie wählt man Tischreihen in Polymer?
- 25. Wie wählt man ohne Tisch in Ecto?
- 26. Wie wählt man Dummy-Spalte in peewee?
- 27. Wie wählt man 'Ausnahmen' in SQL?
- 28. Wie man Django verkettet wählt in Forms.py?
- 29. Wie wählt man einen Kreis in Agar.io?
- 30. Wie wählt man die Kamera in der Webapp?
Da ist * IS * kein Usecase, es ist * eine andere * Methode, die zufällig den gleichen Namen hat, Zeitraum ... –
Der Anwendungsfall ist ziemlich einfach, tatsächlich. Die Schritte sind: 1) Sie stammen von einer Klasse, die nicht unter Ihrer Kontrolle steht (z. B. eine aus dem Framework). 2) Sie führen eine neue Methode namens Foo() ein. 3) Eine neuere Version der Basisklasse führt auch Foo() ein. 4) Sie erhalten eine Compiler-Warnung und beheben sie. –
Die Optionen zum Reparieren sind: a) Benennen Sie die Methode um (nicht immer möglich). b) Fügen Sie den Modifikator "new" hinzu. Und ja, das ist eine unangenehme Situation, die Sie wo immer möglich vermeiden sollten - aber es ist schön, dass Sie mit C# zumindest fertig werden. –