title: inconsistent "internal" accessibility c#
body: <p>I notice an inconsistency in <code>internal</code> keyword:</p>
  <pre><code>// source code of ExpressionVisitor 
  public abstract class ExpressionVisitor 
  {
     protected internal virtual Expression VisitBinary(BinaryExpression node);
     // ...
  }
  </code></pre>
  <p>but if I do:</p>
  <pre><code>public class AndAlsoModifier : ExpressionVisitor 
  {
     protected override Expression VisitBinary(BinaryExpression b)  // compile OK
     {
        // ...
     }
  }
  
  public class Test
  {
     protected internal virtual void T() { }
  }
  
  public class Test2 : Test
  {
     protected override void T() { }  // doesn't compile, I have to keep internal after protected
  }
  </code></pre>
  <p>why I don't need <code>internal</code> for <code>AndAlsoModifier</code> but need <code>internal</code> for <code>Test2</code>?</p>