title: Equating derived classes based on their base's Equals()
body: <p>I have two classes which both derive from the same parent:</p>
  
  <pre><code>public class People{
      public string BetterFoot;
  
      public override bool Equals(object obj){
          if (obj == null || this.GetType() != obj.GetType())
              return false;
          People o = (People)obj;
          return (this.BetterFoot == o.BetterFoot);
      }
  
  public class LeftiesOrRighties: People{
      public string BetterHand;
  
      public override bool Equals(object obj){
          if (obj == null || this.GetType() != obj.GetType())
              return false;
          LeftiesOrRighties o = (LeftiesOrRighties)obj;
          return (this.BetterFoot == o.BetterFoot) &amp;&amp;
          (this.BetterHand == o.BetterHand)
      }
  }
  
  public class Ambidextrous: People{
      public string FavoriteHand;
  }
  </code></pre>
  
  <p>(There are GetHashCodes in there, too, but I know that they work.)
  I'd like to compare collections of them, based on their root Equals():</p>
  
  <pre><code>ThoseOneHanded = new List&lt;LeftiesOrRighties&gt;(){new LeftiesOrRighties(){BetterFoot = "L"}};
  ThoseTwoHanded = new List&lt;Ambidextrous&gt;(){new Ambidextrous(){BetterFoot = "L"}};
  //using NUnit
  Assert.That ((People)ThoseOneHanded[0], Is.EqualTo((People)ThoseTwoHanded[0])));
  </code></pre>
  
  <p>Unfortunately, this returns <code>false</code>. </p>
  
  <p>Why? Shouldn't the casting make them (for all intents and purposes, if not exactly) the same type, and thus use the base methods? And if not, how do I truly cast the underlying type back to <code>People</code>?</p>