很多消息来源谈论这个问题,但我不太了解这个概念。 IDictionary是通用的,它的类型安全等。
当我深入了解EntityFrameworkv5时,我在LogEntry类中看到了一个声明如下的属性。
private IDictionary<string, object> extendedProperties;
问题是为什么他们更喜欢使用IDictionary来对抗Hashtable,因此Hashtable也将键作为字符串和对象。唯一的原因是通过选择IDictionary来使属性具有多态性?
提前致谢。
答案 0 :(得分:3)
如今,使用Hashtable
的理由很少。 Dictionary<>
在大多数方面都比它好。如果不是这样,你通常可以找到另一个强类型的集合,它比任何一个都更好。
如果您问为什么键入属性为IDictionary<>
而不是Dictionary<>
,则有几个原因。
IDictionary<>
更通用的接口Dictionary<>
。因此,使用IDictionary<>
可以让其他开发人员更好地与该属性进行交互。答案 1 :(得分:1)
好吧是的,如果他们已经将extendedproperies定义为返回哈希表,那么他们将一直坚持使用它,除非他们想要破坏使用扩展属性的所有代码。
返回接口的重点是,只要它继续这样做,方法的实现方式并不重要。
“唯一的理由是让属性变为多态”错过了重点,应该没有什么理由不这样做。如果你可以返回一个接口,那么返回一个接口,大部分时间都是好的设计。
答案 2 :(得分:1)
因此,这里的大部分答案都是关于将Dictionary与Hashtable进行比较以达到一般目的,而不是为什么他们选择了特定的实现。
在该特定实现中,您是正确的,它使用对象作为返回类型,因此字典的强类型优势不可用。
IMO归结为New vs Old,ArrayList,Hashtable等是旧技术,并且在很大程度上不受欢迎,因为它们没有很多功能(在其他答案中有描述)。虽然在这种特殊情况下不使用这些功能,但是切换回旧技术并没有很大的好处,它为个人发展提供了一个更好的例子。
所以更重要的是“这就是我们现在这样做的方式”
答案 3 :(得分:0)
HashTable是弱类型的,只能返回Object。字典&lt;&gt;对于存储在其中的任何类型都是强类型的。