首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >风格上的差异: IDictionary与字典

风格上的差异: IDictionary与字典
EN

Stack Overflow用户
提问于 2009-10-20 15:31:40
回答 13查看 70.6K关注 0票数 82

我有一个朋友,在用Java语言开发了很长时间之后,他刚刚进入.NET开发领域,在看了他的一些代码后,我注意到他经常做以下事情:

代码语言:javascript
复制
IDictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();

他将字典声明为接口,而不是类。通常,我会执行以下操作:

代码语言:javascript
复制
Dictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();

我只在需要时使用IDictionary接口(例如,将字典传递给接受IDictionary接口的方法)。

我的问题是,他的做法有什么可取之处吗?这在Java中是常见的做法吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-10-20 23:35:06

如果IDictionary是一种比字典“更通用”的类型,那么在声明变量时使用更通用的类型是有意义的。通过这种方式,您不必关心分配给变量的实现类,并且将来可以轻松地更改类型,而不必更改大量以下代码。例如,在Java中,通常认为这样做更好

代码语言:javascript
复制
List<Integer> intList=new LinkedList<Integer>();

比它要做的更多

代码语言:javascript
复制
LinkedList<Integer> intList=new LinkedList<Integer>();

这样,我确信下面的所有代码都将List视为list,而不是LinkedList,这样将来就可以很容易地为Vector类或任何其他实现List的类切换LinkedList。我要说的是,这对于Java和一般的好的编程来说是很常见的。

票数 72
EN

Stack Overflow用户

发布于 2009-10-20 15:36:25

这种做法并不局限于Java。

当您想要将对象的实例从您正在使用的类中分离出来时,也经常在.NET中使用它。如果您使用的是接口而不是类,则可以在需要时随时更改支持类型,而不会破坏其余代码。

您还将看到大量使用工厂模式处理IoC容器和实例化的实践。

票数 28
EN

Stack Overflow用户

发布于 2009-10-20 23:38:24

你的朋友正在遵循一个非常有用的原则:

“将自己从实现细节中抽象出来”

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1595498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档