// 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();
}
}
Le résultat est:
Called from Special Derived.
Called from Derived. /* this is not expected */
Called from Base.
Comment puis-je réécrire SpecialDerived classe de sorte que la classe moyenne "est Dérivé de"s'méthode n'est pas appelée?
Mise à JOUR:
La raison pourquoi je veux hériter de la Dérivée au lieu de la Base est Dérivé de la classe contient beaucoup d'autres implémentations. Puisque je ne peux pas faire base.base.method()
ici, je suppose que la meilleure façon est de faire les choses suivantes?
// Ne peut pas modifier le code source
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.");
}
}