// 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();
}
}
Hasilnya adalah:
Dipanggil dari Special Derived.
Dipanggil dari Berasal. / * ini tidak diharapkan * /
Dipanggil dari Base.
Bagaimana saya bisa menulis ulang kelas SpecialDerived sehingga metode kelas menengah "Derived" tidak dipanggil?
UPDATE:
Alasan mengapa saya ingin mewarisi dari Derived bukannya Base is Derived class berisi banyak implementasi lainnya. Karena saya tidak bisa melakukannya di base.base.method()
sini, saya rasa cara terbaik adalah melakukan hal berikut?
// Tidak dapat mengubah kode sumber
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.");
}
}