// 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:
Appelé de Special Derived.
Appelé de dérivé. / * ce n'est pas prévu * /
Appelé depuis la base.
Comment puis-je réécrire la classe SpecialDerived afin que la méthode de la classe moyenne "Derived" ne soit pas appelée?
MISE À JOUR:
La raison pour laquelle je veux hériter de Derived au lieu de Base est la classe Derived 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 ce qui suit?
// Impossible de changer 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.");
}
}