title: Why must an abstract method be protected in a derived class?
body: <p>When inheriting from an abstract class, why can't the protected abstract methods in an abstract base class be private when they are overridden in an abstract derived class?</p>
  <p>Rephrasing, is it possible for an abstract method to be defined by a child abstract class, but then not accessible by a grandchild class?</p>
  <p>Consider the simplified example:</p>
  <pre><code>public abstract class A
  {
      // This method is protected - makes sense
      protected abstract void M();
  }
  
  public abstract class B : A
  {
      // Why can't this be private?
      // Compiler forces it to be protected
      // but this means grandchildren classes always have access to this method
      protected override void M()
      {
          // Do something
      }
  }
  
  public class C : B
  {
      // Is it possible for M() to be inaccessible here?
  }
  </code></pre>