// 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();
}
}
ผลลัพธ์คือ:
เรียกจากผลพิเศษ
เรียกจาก Derived. / * ไม่คาดหวัง * /
เรียกจากฐาน
ฉันจะเขียนคลาส SpecialDerived ใหม่ได้อย่างไรเพื่อไม่ให้เมธอดของ "Derived" ระดับกลางถูกเรียก
UPDATE:
เหตุผลที่ฉันต้องการสืบทอดจาก Derived แทน Base is Derived class มีการใช้งานอื่น ๆ มากมาย เนื่องจากฉันทำbase.base.method()
ที่นี่ไม่ได้ฉันจึงเดาว่าวิธีที่ดีที่สุดคือทำสิ่งต่อไปนี้?
// ไม่สามารถเปลี่ยนซอร์สโค้ด
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.");
}
}