// Cannot change source code
class Base
{
public virtual void Say()
{
Console.WriteLine("Called from Base.");
}
}
// Cannot change source code
class Derived : Base
{
public override void Say()
{
Console.WriteLine("Called from Derived.");
base.Say();
}
}
class SpecialDerived : Derived
{
public override void Say()
{
Console.WriteLine("Called from Special Derived.");
base.Say();
}
}
class Program
{
static void Main(string[] args)
{
SpecialDerived sd = new SpecialDerived();
sd.Say();
}
}
Результат:
Викликається зі спеціальних похідних.
Подзвонено з похідних. / * цього не очікується * /
Викликано з Бази.
Як я можу переписати клас SpecialDerived, щоб метод середнього класу "Похідний" не викликався?
ОНОВЛЕННЯ:
Причина, чому я хочу успадковувати від Derived замість Base, - це отриманий клас містить безліч інших реалізацій. Оскільки я тут не можу зробити base.base.method()
, я думаю, найкращий спосіб - це зробити наступне?
// Неможливо змінити вихідний код
class Derived : Base
{
public override void Say()
{
CustomSay();
base.Say();
}
protected virtual void CustomSay()
{
Console.WriteLine("Called from Derived.");
}
}
class SpecialDerived : Derived
{
/*
public override void Say()
{
Console.WriteLine("Called from Special Derived.");
base.Say();
}
*/
protected override void CustomSay()
{
Console.WriteLine("Called from Special Derived.");
}
}