我们使用在DLL中实现的组件。它继承自System.Windows.Forms.Control。我们需要将其用作.NET Hashtable对象中的键。
如MSDN所述,
Hashtable用作键的对象需要重写Object.GetHashCode方法(或IHashCodeProvider接口)和Object.Equals方法(或IComparer接口)。
但是我们正在讨论的控件没有自己的GetHashCode方法实现。Object.GetHashCode的文档告诉我们
如果未重写GetHashCode,则通过调用基类的Object.GetHashCode方法来计算引用类型的哈希码,该方法将基于对象的引用来计算哈希码。
这是否意味着我们可以安全地在哈希表中按原样使用控件?
执行此操作时,您应该只关心对象标识。换句话说,您永远不会希望两个控件映射到相同的哈希表插槽。永远不会精确到+/- 1%
Control类继承的默认Object.GetHashCode()和Object.Equals()实现已经很完美了,它们实现了对象引用身份。
当然,您应该这样做Dictionary<Control, Something>
,Hashtable是8年前的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句