// 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();
}
}
Sonuç:
Özel Türetilmiş Aradı.
Türetildi. / * bu beklenmiyor * /
Üssünden çağrıldı.
SpecialDerived sınıfını orta sınıf "Derived" yönteminin çağrılmaması için nasıl yeniden yazabilirim?
GÜNCELLEME:
Base yerine Derived sınıfından miras almak istememin nedeni, Derived sınıfı birçok başka uygulama içeriyor. base.base.method()
Burada yapamayacağıma göre , sanırım en iyi yol aşağıdakileri yapmak?
// Kaynak kodu değiştirilemez
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.");
}
}