title: C# Method overload resolution not selecting concrete generic override
body: <p>This complete C# program illustrates the issue:</p>
  
  <pre><code>public abstract class Executor&lt;T&gt;
  {
      public abstract void Execute(T item);
  }
  
  class StringExecutor : Executor&lt;string&gt;
  {
      public void Execute(object item)
      {
          // why does this method call back into itself instead of binding
          // to the more specific "string" overload.
          this.Execute((string)item);
      }
  
      public override void Execute(string item) { }
  }
  
  class Program
  {
      static void Main(string[] args)
      {
          object item = "value";
          new StringExecutor()
              // stack overflow
              .Execute(item); 
      }
  }
  </code></pre>
  
  <p>I ran into a StackOverlowException that I traced back to this call pattern where I was trying to forward calls to a more specific overload. To my surprise, the invocation was not selecting the more specific overload however, but calling back into itself. It clearly has something to do with the base type being generic, but I don't understand why it wouldn't select the Execute(string) overload.</p>
  
  <p>Does anyone have any insight into this?</p>
  
  <p><em>The above code was simplified to show the pattern, the actual structure is a bit more complicated, but the issue is the same.</em></p>