title: How to best implement Equals for custom types?
body: <p>Say for a Point2 class, and the following Equals:</p>
  
  <pre><code>public override bool Equals ( object obj )
  
  public bool Equals ( Point2 obj )
  </code></pre>
  
  <p>This is the one that is shown in the Effective C# 3:</p>
  
  <pre><code>public override bool Equals ( object obj )
  {
      // STEP 1: Check for null
      if ( obj == null )
      {
          return false;
      }
  
      // STEP 3: equivalent data types
      if ( this.GetType ( ) != obj.GetType ( ) )
      {
          return false;
      }
      return Equals ( ( Point2 ) obj );
  }
  
  public bool Equals ( Point2 obj )
  {
      // STEP 1: Check for null if nullable (e.g., a reference type)
      if ( obj == null )
      {
          return false;
      }
      // STEP 2: Check for ReferenceEquals if this is a reference type
      if ( ReferenceEquals ( this, obj ) )
      {
          return true;
      }
      // STEP 4: Possibly check for equivalent hash codes
      if ( this.GetHashCode ( ) != obj.GetHashCode ( ) )
      {
          return false;
      }
      // STEP 5: Check base.Equals if base overrides Equals()
      System.Diagnostics.Debug.Assert (
          base.GetType ( ) != typeof ( object ) );
  
      if ( !base.Equals ( obj ) )
      {
          return false;
      }
  
      // STEP 6: Compare identifying fields for equality.
      return ( ( this.X.Equals ( obj.X ) ) &amp;&amp; ( this.Y.Equals ( obj.Y ) ) );
  }
  </code></pre>