title: Do I need to override GetHashCode() on reference types?
body: <p>I read most questions on StackOverflow with regards to <code>GetHashCode</code>. But I am still not sure whether I have to override <code>GetHashCode</code> on reference types. I picked up the following from someones answer in another question:</p>
  
  <blockquote>
    <p>Object.GetHashCode() uses an internal
    field in the System.Object class to
    generate the hash value. Each object
    created is assigned a unique object
    key, stored as an integer,when it is
    created. These keys start at 1 and
    increment every time a new object of
    any type gets created.</p>
  </blockquote>
  
  <p>If this is still true in .NET Framework 3.5 (can someone please confirm?), then the only problem I see with the default implementations of reference types is that the hash code will have a poor distribution. </p>
  
  <p>I'll break up my questions:</p>
  
  <p>a) So it it recommended to override <code>GetHashCode</code> too if it is used in a <code>Dictionary</code> or does the default implementation perform just fine? </p>
  
  <p>b) I have reference types where it would be easy to do since they have fields that identify them uniquely but what about those reference types where all members are also reference types. What should I do there?</p>