我们知道,如果我们重写自定义类型中的Equals
方法Object
,我们还应该重写并提供GetHashCode
方法的实现来支持生成唯一的哈希码,以支持Hashtable
和Dictionary
收集类,并且可能是其他类。
这要求我们在我们的方法中使用的散列算法的实现overriden
GetHashCode
是最佳且准确的,即它生成该类型的唯一散列,并且尽可能快地这样做以提高使用我们类型的应用程序的性能。
我的问题是哪些散列算法是准确的并且在GetHashCode
实现中使用时可以提供最佳性能?或者,我们应该只使用基类型的GetHashCode
实现吗?我想知道这个答案value types
和reference types
..
编辑:下面是一个关于为什么我需要覆盖的类的示例Equals
:
public class Laptop : LaptopBase
{
public readonly string Make;
public readonly string ProcessorArch;
public readonly int MemorySupported;
public readonly int HardDiskGBSupported;
public readonly Color ColorName;
public Laptop(make, procArch, memorySupp, hdGB, color)
{
Make = make;
ProcessorArch = procArch;
MemorySupported = memorySupp;
HardDiskGBSupported = hdGB;
ColorName = color;
}
}
现在,我想为 2 个膝上型计算机实例返回 true,这些实例的所有上述定义的字段都相互匹配,因此需要重写Equals
andGetHashCode
方法,并且您可以看到的另一个要求是,这是一个派生类,并且可以重新进一步使用并支持多种方法;因此,不能成为值类型(结构)。我尝试使用具有所有匹配实例字段的上述类型的 2 个实例,如果我使用Equals
- 它的基本实现,它会返回false
我想要的位置true
。
我将如何支持这种情况?