很多资源都在讨论这个问题,但我对这个概念理解得不是很好。IDictionary是泛型的,它的类型安全等等。
当我深入研究EntityFrameworkv5时,我看到一个在LogEntry类中声明的属性,如下所示。
private IDictionary<string, object> extendedProperties;问题是为什么他们更喜欢IDictionary而不是哈希表,因此哈希表也将关键字作为字符串和对象。唯一的原因是通过选择IDictionary来使属性多态?
提前谢谢。
发布于 2012-06-10 03:12:12
现在,使用Hashtable的理由很少。Dictionary<>在大多数方面都比它更好。如果不是这样,您通常可以找到另一个强类型的集合,它比这两个集合都更能满足您的需求。
IDictionary<>的兼容性比Hashtable更好。请参阅链接:Link #2.、Link #1
如果您想知道为什么要将属性类型化为IDictionary<>而不是Dictionary<>,这有几个原因。
IDictionary<>代码更有可能消耗更通用的接口Dictionary<>而不是具体的类Dictionary<>。因此,使用IDictionary<>可能会让其他开发人员更好地与property.发布于 2012-06-10 02:17:33
嗯,是的,如果他们把扩展属性定义为返回哈希表,那么他们就会一直坚持这样做,除非他们想破坏所有使用扩展属性的代码。
返回接口的全部意义在于,方法如何实现并不重要,只要它一直这样做即可。
“唯一的原因是使属性多态”没有抓住要点,你应该有很少的理由不应该这样做。如果你可以返回一个接口,那么在大多数情况下,这是一个很好的设计。
发布于 2012-06-11 22:02:22
因此,这里的大多数答案都是关于将Dictionary与Hashtable进行一般用途的比较,而不是他们为什么选择那个特定的实现。
在特定实现中,您是正确的,它使用object作为返回类型,因此字典的强类型优势不可用。
do它归结为新旧,ArrayList,哈希表等是较旧的技术,通常很大程度上是不受欢迎的,因为它们没有大量的功能(在其他答案中描述)。尽管在这种特殊情况下没有使用这些功能,但切换回旧技术并没有很大的好处,它为个人发展提供了一个更好的例子。
所以更多的是“这就是我们现在做的方式”的问题
https://stackoverflow.com/questions/10963374
复制相似问题