public override int GetHashCode() { // caches hash code if ( HashInvalid ) { HashCode = GetHashCodeCore(); HashInvalid = false; } return HashCode; }