wie Sie access-Methode der übergeordneten Klasse mit der Instanz von child-Klasse in c#
Habe ich diesen code
class parent
{
public void sleep()
{
//Some Logic
}
}
class Child : Parent
{
public void sleep()
{
//some logic
}
}
class Implement
{
Child ch = new Child();
ch.sleep();
}
Aber jetzt möchte ich den Zugriff sleep () - Methode der übergeordneten Klasse mithilfe Instanz der Kind-Klasse, die ist bereits erstellt.
- Diese Anordnung resultiert in
Child
shadowing die base-Klassesleep
- Methode, die eine ungewöhnliche Anordnung. Der compiler warnt Sie, indem er sagte, Sie sollten hinzufügennew
auf die Kind-Methode Erklärung, wenn das, was Sie wirklich wollen. Ist es? - Wollen Sie die Möglichkeit zum Aufruf einer Methode aus einer
Child
Objekt (wenn ja, warum haben Sie die gleichen Namen?) Oder wollen Sie einfach nur die Kind-Klasse, immer rufen die Eltern die Schlaf-Methode mit zusätzlicher Logik? - Zugriff, wie? erwarten Sie ch, um irgendwie Zugriff auf die Methode der
Parent
oder Sie wollen einfach nur, um den Zugang übergeordnete Methode InnenseiteChild
Instanz. - Wie Kevin bereits erwähnt, wenn Sie verschiedene Dinge tun, warum nicht Sie nennen die zweite Methode etwas anderes?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie werfen Ihr Objekt zu parent-Typ.
new Child()
nichtnew Parent()
Parent.sleep()
.override
die übergeordnete Klasse Methode!Brauchen Sie nur zu werfen, die erstellt
Child
ObjektParent
:Als @Thorsten unten kommentiert, das funktioniert, weil
Parent.sleep
ist ein nicht-virtuellen Methode und es ist nicht überschrieben in derChild
Klasse. Wenn Sie überschrieben wurden, dann gäbe es keine Möglichkeit für Sie, rufen Sie dieParent.sleep
Umsetzung mitch
. (Fürvirtual
Methoden, die Methode, die aufgerufen wird, ist die "am meisten abgeleitete Implementierung", das ist die abgeleitete Implementierung der Methode in der Klassenhierarchie mit deroverride
Stichwort.)override
die übergeordnete Klasse Methode!Zugriff auf übergeordnetes Element, müssen Sie die cast-Objekt.
Quelle: new-Schlüsselwort in der Signatur der Methode
Vorschlag: du bist investieren wollte, verheimlichte Sie einen geerbten member. Sollten Sie "neue" Schlüsselwort, wie diese:
Könnte man erstellen Sie eine neue Methode für Kind namens ParentSleep etwa so:
Dann rufe es so auf:
sleep
Methode sollte es keine Schatten-it. Und wenn es nicht verstecken wollen, dann macht es keinen Sinn, zu setzen wie diesem.wenn Sie möchten, um dies zu implementieren, mit der interface als auch auf Übergeordneten Klasse können Sie so etwas tun :