我目前正在阅读 Troelsen 的书籍《C# 和 .NET 4.5 框架》。书中有一节涉及重写的示例。
他说(以下引用摘自Troelsen的书):
鉴于String类已经有一个可靠的哈希码算法,它使用字符串的字符数据来计算哈希值。如果您可以确定类上的某个字段数据对于所有实例都应该是唯一的(例如社会安全号码),只需在该字段数据上调用GetHashCode()方法即可。
基本上,他所说的是某个类有一个成员(自动只读属性)。
每个该类的实例都将拥有一个唯一的字符串值。 现在,在假设下,
他的推理是正确的。然而,当我阅读String.GetHashCode()时:
谢谢!
public virtual int GetHashCode(); // Defined in System.Object
他说(以下引用摘自Troelsen的书):
鉴于String类已经有一个可靠的哈希码算法,它使用字符串的字符数据来计算哈希值。如果您可以确定类上的某个字段数据对于所有实例都应该是唯一的(例如社会安全号码),只需在该字段数据上调用GetHashCode()方法即可。
基本上,他所说的是某个类有一个成员(自动只读属性)。
public string SSN {get; }
每个该类的实例都将拥有一个唯一的字符串值。 现在,在假设下,
// s1 and s2 are strings
s1.GetHashCode() != s2.GetHashCode(); // Assumption: If this true then s1 == s2 is true
他的推理是正确的。然而,当我阅读String.GetHashCode()时:
我想你应该明白我的意思了。如果我错了,请指出我的错误所在。如果两个字符串对象相等,则GetHashCode方法返回相同的值。但是,每个唯一字符串值并没有一个唯一的哈希码值。不同的字符串可以返回相同的哈希码。
谢谢!
Person
实例具有相同的SSN
值:“如果您可以为类上的某个字段数据确定唯一性,该字段数据对于所有实例都应该是唯一的(例如社会安全号码)”。但是,如果您实际上没有根据 SSN 定义相等性,则您的观点非常值得记住。 - user743382