【发布时间】:2010-12-08 09:44:08
【问题描述】:
我有一个朋友在使用 Java 开发多年后才刚刚进入 .NET 开发,在查看了他的一些代码后,我注意到他经常执行以下操作:
IDictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();
他将字典声明为接口而不是类。通常我会做以下事情:
Dictionary<string, MyClass> dictionary = new Dictionary<string, MyClass>();
我只会在需要时使用 IDictionary 接口(例如,将字典传递给接受 IDictionary 接口的方法)。
我的问题是:他的做事方式有什么优点吗?这是 Java 中的常见做法吗?
【问题讨论】:
-
对于局部变量真的没有意义。
-
一个好的做法但是要注意性能成本:nimaara.com/2016/03/06/beware-of-the-idictionary-tkey-tvalue
-
IDictionary的两个主要实现(Dictionary和ConcurrentDictionary)具有非常不同的性能特征(例如,Count在前者上非常快,在后者上非常慢)。 因此,我的建议是尽可能在 C# 中指定具体类(而不是IDictionary),以便消费者知道如何以高效的方式使用字典。 -
此外,
IDictionary有一些性能“怪癖” - nimaara.com/2016/03/06/beware-of-the-idictionary-tkey-tvalue。