1

我们使用在 DLL 中实现的组件。它继承自 System.Windows.Forms.Control。我们需要将它用作 .NET Hashtable 对象中的键。

正如MSDN 所说

Hashtable 用作键的对象需要覆盖 Object.GetHashCode 方法(或 IHashCodeProvider 接口)和 Object.Equals 方法(或 IComparer 接口)。

但是我们说的控件没有自己的GetHashCode方法实现。Object.GetHashCode的文档告诉我们

如果未覆盖 GetHashCode,则通过调用基类的 Object.GetHashCode 方法计算引用类型的哈希码,该方法根据对象的引用计算哈希码

这是否意味着我们可以安全地在哈希表中“按原样”使用控件?

4

1 回答 1

2

当你这样做时,你应该只关心对象身份。换句话说,您永远不会希望两个控件映射到同一个哈希表槽。从不精确到 +/- 1%

Control 类继承的默认 Object.GetHashCode() 和 Object.Equals() 实现已经很完善,它们实现了对象引用标识。

当然你应该Dictionary<Control, Something>,Hashtable 是 8 年前的事了。

于 2013-08-05T13:51:15.783 回答