一个类有一个ID属性,此属性从SQL表的主键列中获取值。基于主键的GetHashCode() - 安全吗?
它是一个很好的做法,如果我写
public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
到我的课? (的Equals已经overrided以同样的方式。)
一个类有一个ID属性,此属性从SQL表的主键列中获取值。基于主键的GetHashCode() - 安全吗?
它是一个很好的做法,如果我写
public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
到我的课? (的Equals已经overrided以同样的方式。)
你为什么特别想在hashcode中包含这个类型?我可以看到,如果你有很多不同类型的在同一地图同一ID对象的可能是有用的,但通常我只用
public override int GetHashCode()
{
return ID; // If ID is an int
// return ID.GetHashCode(); // otherwise
}
注意继承范围内的平等观念成为棘手层次结构 - 偏好合成而非继承的另一个原因。你真的需要担心这个吗?如果你能封住你的类,它将使平等的测试更容易,因为你只需要编写:(你可能希望有一个强类型的equals方法和实施IEquatable)
public override bool Equals(object obj)
{
MyType other = obj as other;
return other != null && other.ID == ID;
}
为什么你不能只是做
public override int GetHashCode() {
return this.ID.GetHashCode();
}
我不知道你在做什么是好的做法,因为我不熟悉如何哈希码被分配给一个类型实例。哈希码的目的是以Int32形式存在对象的一致性表示。
谢谢对于你们两个人来说,密封的想法+1。 – boj 2009-07-01 16:59:18