Reimplemented Equals method and override GetHashCode()