title: Why do two equal instances of IEquatable<T> return false?
body: <p><strong>Consider the following code</strong></p>
  
  <pre><code>public class Rectangle : IEquatable&lt;Rectangle&gt;
  {
      public int Width { get; set; }
      public int Height { get; set; }
  
      public bool Equals(Rectangle other)
      {
          return Width == other.Width
              &amp;&amp; Height == other.Height;
      }
  }
  
  IEquatable&lt;Rectangle&gt; a = new Rectangle() { Width = 10, Height = 20 };
  IEquatable&lt;Rectangle&gt; b = new Rectangle() { Width = 10, Height = 20 };
  
  a.Equals(b); // returns false;
  </code></pre>
  
  <p>I know the value semantics of this class are awful (sorry). I normally follow the C# guidelines for <code>IEquatable&lt;T&gt;</code> implementation, which state that <code>object.Equals(object obj)</code> also needs to be overridden. - This is just speculation.</p>
  
  <p>Since <em>a</em> and <em>b</em> are declared as <code>IEquatable&lt;Rectangle&gt;</code>, why when I call <code>Equals</code>, is it calling <code>object.Equals(object obj)</code>, rather than <code>IEquatable&lt;Rectangle&gt;.Equals(Rectangle other)</code>?</p>
  
  <p>It seems a little odd to use the <code>object</code> implementation over the <code>IEquatable&lt;T&gt;</code> implementation <em>(again, I know I SHOULD override the classes default <code>Equals(object obj)</code> implementation...this is just speculation as to why this happens)</em></p>