title: Why does C# support abstract overrides of abstract members?
body: <p>Whilst browsing through some legacy code, I was surprised to encounter an <strong>abstract override of a member that was abstract by itself.</strong> Basically, something like this:</p>
  
  <pre><code>public abstract class A
  {
      public abstract void DoStuff();    
  }
  
  public abstract class B : A
  {
      public override abstract void DoStuff();  // &lt;--- Why is this supported?
  }
  
  public abstract class C : B
  {
      public override void DoStuff() =&gt; Console.WriteLine("!");    
  }
  </code></pre>
  
  <p>Isn't the distinction between a virtual or abstract member always available to the compiler? Why does C# support this?</p>
  
  <p>(This question is not a duplicate of <a href="https://stackoverflow.com/questions/8905432/what-is-the-use-of-abstract-override-in-c">What is the use of &#39;abstract override&#39; in C#?</a>  because the <code>DoStuff</code>-method in class <code>A</code> is not virtual but abstract as well.)</p>