title: Why does C#/CLR not support method override co/contra-variance?
body: <p>There are quite a few questions &amp; answers about hacking around the limitation of C# not allowing method return (and argument) types to be changed to compatible types on overrides, but <i>why</i> does this limitation exist, either in the C# compiler or in the CLR? As I an see, there is nothing that could break if co/contra-variance was allowed, so what is the reasoning behind it?</p>
  
  <p>A similar question could be asked for widening access parameters - eg overriding a protected internal method with a public method (something which Java supports, IIRC)</p>