// 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();
}
}
Il risultato è:
Chiamato da Special Derived.
Chiamato da Derived. / * questo non è previsto * /
Chiamato dalla base.
Come posso riscrivere la classe SpecialDerived in modo che il metodo "Derived" della classe media non venga chiamato?
AGGIORNAMENTO:
Il motivo per cui voglio ereditare da Derived invece che da Base è la classe Derived che contiene molte altre implementazioni. Dato che non posso fare base.base.method()
qui, immagino che il modo migliore sia fare quanto segue?
// Impossibile modificare il codice sorgente
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.");
}
}