我假设 .NET 中的(通用)Dictionary 类在其键上使用 GetHashCode() 方法来生成哈希值。我有两个问题由此引出:
对象有一个可覆盖的 GetHashCode() 方法。对于用户定义 引用类型对象,此方法会根据 引用资料?例如如果我有一个 OneString 类,其中包含 只有一个 String 实例变量 - 将两个单独的实例 这个具有匹配字符串的类总是产生相同的哈希码? 或者是否需要覆盖 OneString 的 GetHashCode() 方法 实现这个功能?
推测在 String 类中实现的散列函数与在不同引用类型(例如 BitmapImage)中实现的散列函数不同。在最常见的类中实现的哈希函数是否公开可用?
最佳答案
没有。
object.GetHashCode()
仅根据该对象的身份返回一个值。
它不会为两个等价对象返回相同的值;它完全不知道对象的类型或含义。
表示值的类(例如 String
)重写 GetHashCode()
以返回基于所表示值的哈希值。
使用的算法取决于类设计者; GetHashCode()
的编写方式与任何其他方法一样。
但是,每当 Equals()
返回 true 时,GetHashCode()
应该返回相等的值;如果您的类(class)不这样做,那就是错误的。
关于c# - GetHashCode 使用哪个哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10807964/