// 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.");
    }
}