// 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();
}
}
O resultado é:
Chamado de Special Derived.
Chamado de Derivado. / * isso não é esperado * /
Chamado da Base.
Como posso reescrever a classe SpecialDerived para que o método da classe média "Derived" não seja chamado?
UPDATE:
A razão pela qual eu quero herdar da classe Derived em vez de Base é a classe Derived contém muitas outras implementações. Como não posso fazer base.base.method()
aqui, acho que a melhor maneira é fazer o seguinte?
// Não é possível alterar o código fonte
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.");
}
}