假设我们有这样一个类:
class MyClass
{
public string SomeValue { get; set; }
// ...
}
现在,假设两个MyClass
实例在它们的SomeValue
属性相等时是相等的。因此,我覆盖了Object.Equals()
和Object.GetHashCode()
表示它的方法。Object.GetHashCode()
返回SomeValue.GetHashCode()
但同时我需要遵循以下规则:
- 如果一个对象的两个实例相等,它们应该返回相同的哈希码。
- 哈希码不应在整个运行时更改。
但显然,SomeValue
可以改变,我们之前得到的哈希码可能会失效。
我只能考虑使该类不可变,但我想知道其他人在这种情况下会做什么。
在这种情况下你会怎么做?拥有这样一个类是否代表了设计决策中的一个更微妙的问题?