Ich habe eine Vererbungskette, die aus drei Klassen A, B und C besteht, wobei A und B abstrakt sind und C eine konkrete Implementierung von B ist.C# Überschreibe eine Basisklassenmethode mehr als eine abgeleitete Klasse in der Vererbungskette
ich habe eine virtuelle Methode auf der Basis abstrakten Klasse A, Foo()
, die ich C. in der konkreten Klasse außer Kraft setzen möchte
Wenn ich versuche, und nur in der Klasse C überschrieben sie nie abgeholt werden und verwendet immer die Standard-Basisklassenimplementierung, aber wenn ich sowohl B & C überschreibe, wird immer nur die B.Foo()
Implementierung der virtuellen Methode verwendet.
Muss ich etwas extra auf B.Foo() außer "override" deklarieren?
Offensichtlich sind diese Versionen meiner Klassen vereinfacht, aber hier sind meine Methode Erklärungen:
abstract class A {
protected virtual string Foo() {
return "A";
}
}
abstract class B : A {
protected override string Foo() {
return "B";
}
}
class C : B {
protected override string Foo() {
return "C";
}
}
haben Sie versucht, die Prüfung der vereinfachten hätte Version Ihrer Klassen? –
Wie rufen Sie Foo an?() auf Klasse C? Ich habe versucht, mit Ihrer Probe zu reproduzieren und war nicht in der Lage. – Jason
Ich hatte das gleiche Problem wegen anderer Fehler. Sobald diese behoben waren und ich neu aufgebaut habe ging der Fehler weg. – Danielson