title: Is narrowing the return type a breaking change?
body: <p>Let's say I have a .NET library (v1.0) with the following method:</p>
  
  <pre><code>public IPrincipal GetUser() { ... }
  </code></pre>
  
  <p>and in version 2.0 I replace it with</p>
  
  <pre><code>public MyUserClass GetUser() { ... }
  </code></pre>
  
  <p>to provide newer clients with additional information.</p>
  
  <p><strong>Assuming that <code>MyUserClass</code> implements <code>IPrincipal</code>, is this a breaking change?</strong></p>
  
  <p>By "breaking change" I mean "breaking w.r.t. <strong>binary compatibility</strong>": If <code>SomeClient.exe</code> uses v1.0 of <code>myLibrary.dll</code>, and I replace it with v2.0 without recompiling <code>SomeClient.exe</code>, will I get into trouble? (Source code compatibility is obviously satisfied. In addition, I am not using strong named assemblies.)</p>