title: How to call base.base.method()?
body: <pre><code>// 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();
      }
  }
  </code></pre>
  
  <p>The result is:</p>
  
  <blockquote>
    <p>Called from Special Derived.<br>
    Called from Derived. /* this is not expected */<br>
    Called from Base.</p>
  </blockquote>
  
  <p>How can I rewrite SpecialDerived class so that middle class "Derived"'s method is not called?</p>
  
  <p><strong>UPDATE:</strong>
  The reason why I want to inherit from Derived instead of Base is Derived class contains a lot of other implementations. Since I can't do <code>base.base.method()</code> here, I guess the best way is to do the following?</p>
  
  <p><strike>// Cannot change source code</strike></p>
  
  <pre><code>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.");
      }
  }
  </code></pre>