Angenommen, wir haben eine Basis "A", einschließlich zwei Methoden "Foo" und "Bar". Die "Foo" -Methode wird für die Öffentlichkeit deklariert, und die "Bar" -Methode ist öffentlich virtuell, sodass die abgeleitete Klasse ihre Implementierung umschreiben kann. Betrachten Sie nun ein Derivat "B", das von "A" geerbt wurde.
versteckt
zum Beispiel im vorgesehenen Codefragment:
Auf die "neue" Schlüsselwörter vor der chinesischen Methode
Klasse "B" werden auf das Typ "B" vom Typ "B" zugegriffen.public new int Foo() { return 1;} //隐藏
umschreiben <重> neu
Andererseits ist die Methode mit der virtuellen Methode oder Abstraktionsmethode in der Basisklasse dieselbe, wenn das Umschreiben in einer Methode der Derivatklasse auftritt. In diesem Fall hat die Implementierung der abgeleiteten Klasse die Implementierung der Basisklasse ausdrücklich ersetzt und wurde zum Standardverhalten der abgeleiteten Instanz.
Weil die Anweisung "Bar" in der Basis "A" virtuell ist, ermöglicht das Schlüsselwort "Überschreibung" der Klasse "B" um neu und bereitzustellen und ihr eigenes Verhalten bereitzustellen.
public override int Bar() {return 1;} //重写
Wenn die abgeleiteten Instanzen in eine Basisklassenreferenz umgewandelt werden, kann das Verstecken zu einem zufälligen Verhalten führen. In diesem Fall kann die versteckte Methode in der Basisklasse anstelle der Umschreibungsmethode in der Derivatklasse aufgerufen werden, die während der Laufzeit Fehler verursachen kann.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Schatten und Überschreibung in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!