我们可以使用从WinForms控件继承的对象作为.NET哈希表的键吗?

我们可以使用从WinForms控件继承的对象作为.NET哈希表的键吗?,.net,winforms,controls,hashtable,.net,Winforms,Controls,Hashtable,我们使用在DLL中实现的组件。它是从System.Windows.Forms.Control继承的。我们需要将其用作.NET哈希表对象中的键 作为 哈希表用作键的对象需要重写Object.GetHashCode方法(或IHashCodeProvider接口)和Object.Equals方法(或IComparer接口) 但是我们讨论的控件没有自己的GetHashCode方法实现。报告告诉我们 如果未重写GetHashCode,则通过调用基类的Object.GetHashCode方法计算引用类型的哈

我们使用在DLL中实现的组件。它是从System.Windows.Forms.Control继承的。我们需要将其用作.NET哈希表对象中的键

作为

哈希表用作键的对象需要重写Object.GetHashCode方法(或IHashCodeProvider接口)和Object.Equals方法(或IComparer接口)

但是我们讨论的控件没有自己的GetHashCode方法实现。报告告诉我们

如果未重写GetHashCode,则通过调用基类的Object.GetHashCode方法计算引用类型的哈希代码,该方法基于对象的引用计算哈希代码


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

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

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


当然你应该
字典
,哈希表是8年前的事了。

是的,强类型字典-尽管它是基于哈希表的。至于
Object.GetHashCode
,我很乐意使用任何.NET reflector工具查看它的实现,以确保100%——但不幸的是,它是非托管实现。。。顺便说一句,即使Microsoft在扩展程序提供程序的示例中仍然使用哈希表而不是字典,但在我的问题中,对我们有好处的是,它们使用控件作为哈希表中的键。您不能使用.NET 1.0发布时编写的示例代码。