title: Why Implement the IEquatable<T> Interface
body: <p>I have been reading articles and understand interfaces to an extent however, if i wanted to right my own custom Equals method, it seems I can do this without implementing the IEquatable Interface. An example.</p>
  
  <pre><code>using System;
  using System.Collections;
  using System.ComponentModel;
  
  namespace ProviderJSONConverter.Data.Components
  {
      public class Address : IEquatable&lt;Address&gt;
      {
          public string address { get; set; }
  
          [DefaultValue("")]
          public string address_2 { get; set; }
          public string city { get; set; }
          public string state { get; set; }
          public string zip { get; set; }
  
          public bool Equals(Address other)
          {
              if (Object.ReferenceEquals(other, null)) return false;
              if (Object.ReferenceEquals(this, other)) return true;
              return (this.address.Equals(other.address)
                  &amp;&amp; this.address_2.Equals(other.address_2)
                  &amp;&amp; this.city.Equals(other.city)
                  &amp;&amp; this.state.Equals(other.state)
                  &amp;&amp; this.zip.Equals(other.zip));
          }
      }
   }
  </code></pre>
  
  <p>Now if i dont implement the interface and leave <code>: IEquatable&lt;Address&gt;</code> out of the code, it seems the application operates exactly the same. Therefore, I am unclear as to why implement the interface? I can write my own custom Equals method without it and the breakpoint will hit the method still and give back the same results.
  Can anyone help explain this to me more? I am hung up on why include "<code>IEquatable&lt;Address&gt;</code>" before calling the Equals method.</p>