wie können wir die überschreibende Methode in der abgeleiteten Klasse ohne "virtual" in der Basisklasse
Dies ist eine interview-Frage. So ist es möglich, das überschreiben einer Methode ohne virtual angegeben in der übergeordneten Methode?
Ich Stimme mit den Kommentaren unten - Sie suchen nach einer Methode versteckt sich hier eher als Methode überschreiben. Die Frage ist also technisch nicht 100% korrekt, mit zu beginnen.
auch seine eine interview-Frage. Manager mit begrenztem wissen oder einfach nur, um irrezuführen, wird mit solchen Fragen.
Es ist ein netter trick-Frage. Wenn Sie nur die Antwort "verwenden
Jon B: ich würde vermuten, dass die Art von Menschen, die wissen, wie verbergen einer Methode mit
auch seine eine interview-Frage. Manager mit begrenztem wissen oder einfach nur, um irrezuführen, wird mit solchen Fragen.
Es ist ein netter trick-Frage. Wenn Sie nur die Antwort "verwenden
new
", dann wissen Sie, Sie haben einen Kandidaten, der nicht vollständig verstehen, das Thema.Jon B: ich würde vermuten, dass die Art von Menschen, die wissen, wie verbergen einer Methode mit
new
wahrscheinlich auch wissen, dass es nicht das selbe wie überschreiben.InformationsquelleAutor nash | 2010-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wahrscheinlich wollte Sie sagen, "Verwenden der
new
keyword zu verstecken der Methode." Die technisch überschreibt nicht die Methode. Wenn SieUnd dann schrieb
Würden Sie andere Ergebnisse sehen. Also Funktionen, die die Nutzung der Basis-Klasse bekommen würde, die Ergebnisse für die Basis-Methode, und Funktionen, die das verwenden der abgeleiteten Klasse würde man die Ergebnisse für die neue Methode.
InformationsquelleAutor Anthony Pegram
Technisch nicht überschreiben der Methode. Sie können es verstecken, obwohl, mit der
new
Stichwort:Der Haken ist, dass, wenn Sie anrufen
Bar()
von der Basisklasse (oder wenn Sie die Umwandlung FooChild Foo), wird ausgeführt, der Basis-Klasse " code - nicht der "neuen" code.InformationsquelleAutor Jon B
Wenn das überschreiben nicht-virtueller öffentliche Methoden möglich war, hätten wir viel mehr starke mocking-frameworks. Nein, es ist nicht möglich überschreiben nicht-virtuelle member, nur verstecken Sie mit
new
- Schlüsselwort.InformationsquelleAutor Igor Zevaka
Der folgenden ist nicht zu überschreiben. Auch, bitte Tu das niemals für real. Es ist ein "trick", um eine alternative Verhalten, obwohl:
Ergebnis:
Edit: Obwohl ich sagen, es ist ein trick, es könnte aufgeräumt werden in dem Strategie-Muster oder ähnliches.
auch dies zeigt die macht der dynamische Sprachfeatures plus, wie leicht es missbraucht werden kann
InformationsquelleAutor Giraffe
Dem Schlüsselwort "new" verstecken kann eine definierte Methode in einer Basisklasse, wenn Sie den Zugang, die Methode durch einen compile-Zeit-Referenz vom Typ T, so dass typeof(DerivedClass).IsAssignableFrom(typeof(T)). Sie können nicht wirklich außer Kraft setzen, jedoch. Referenzen, verwenden die base-Typ zur compile-Zeit wird immer rufen die basismethode auf, unabhängig davon, was Sie tun, in der definition der abgeleiteten Klasse.
Wenn ich wurden gebeten, die Frage in einem interview, dass das, was ich sagen würde. Wenn ich Fragen, ist die Antwort, die ich hoffen würde. Wer denkt, dass "neue" ist das gleiche wie "überschreiben" und nicht qualifizieren Ihre Antwort irgendwie nicht verstehen, was "virtuell" bedeutet, oder, wie vtables Arbeit (konzeptionell oder mechanisch).
InformationsquelleAutor blucz
Nein, es wäre-Funktion versteckt.
InformationsquelleAutor DevDemon
diese Weise wir es tun können mit new-Schlüsselwort.
InformationsquelleAutor Thomas