Szukałem i nie byłem w stanie znaleźć żadnego rozwiązania mojego problemu. Mój scenariusz jest bardzo prosta:base.Method() z wieloma poziomami dziedziczenia, które nie są wywoływane?
public class A
{
public virtual void MethodOne()
{
Console.log("A");
}
}
public class B : A
{
public override void MethodOne()
{
base.MethodOne();
Console.log("B");
}
}
public class C : B
{
public override void MethodOne()
{
base.MethodOne();
Console.log("C");
}
}
Co staram się zrobić, to mieć instancję klasy C (my name it „instanceC”) nazywamy zarówno zastąpiona metoda jego rodzica, a jego dziadkowie. Tak bym tego spodziewać:
instanceC.MethodOne();
// Output:
// "A"
// "B"
// "C"
Ale zamiast otrzymuję to:
instanceC.MethodOne();
// Output
// "A"
// "C"
z metody klasy B. są pomijane. Czy to nie jest możliwe? Myślałem, że to jest cały punkt dziedziczenia/polimorfizmu. Z góry dziękuję!
Czy jesteś pewien, że C pochodzi od B, a nie od A? – jure
Dlaczego C Ovveride z B? chcesz, aby odziedziczył po A. – Derek
Twój przykład działa zgodnie z oczekiwaniami i drukuje "ABC" – Lee