Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IDictionary<;字符串,字符串>;对字典<;字符串,字符串>;_C#_Generics_Collections - Fatal编程技术网

C# IDictionary<;字符串,字符串>;对字典<;字符串,字符串>;

C# IDictionary<;字符串,字符串>;对字典<;字符串,字符串>;,c#,generics,collections,C#,Generics,Collections,在这里使用IDictionary的价值是什么?使用接口的价值总是一样的:切换到其他后端实现时,不必更改客户端代码 考虑一下,稍后对代码进行分析会发现哈希表实现(在字典中使用)不适合您的任务,而二进制搜索树的性能会更好。如果您已经编码到一个接口,那么切换实现是很简单的。然而,如果您使用了一个具体的类,那么您必须在更多的地方更改更多的代码。=>这需要时间和金钱。IDictionary支持更松散的耦合 假设您有这样一种方法: void DoSomething(IDictionary<string

在这里使用IDictionary的价值是什么?

使用接口的价值总是一样的:切换到其他后端实现时,不必更改客户端代码


考虑一下,稍后对代码进行分析会发现哈希表实现(在
字典中使用)不适合您的任务,而二进制搜索树的性能会更好。如果您已经编码到一个接口,那么切换实现是很简单的。然而,如果您使用了一个具体的类,那么您必须在更多的地方更改更多的代码。=>这需要时间和金钱。

IDictionary支持更松散的耦合

假设您有这样一种方法:

void DoSomething(IDictionary<string, string> d)
{
   //...
}
Dictionary<string, string> a = new Dictionary<string, string>();
SortedDictionary<string, string> b = new SortedDictionary<string, string>();
DoSomething(a);
DoSomething(b);
void DoSomething(索引d)
{
//...
}
您可以这样使用它:

void DoSomething(IDictionary<string, string> d)
{
   //...
}
Dictionary<string, string> a = new Dictionary<string, string>();
SortedDictionary<string, string> b = new SortedDictionary<string, string>();
DoSomething(a);
DoSomething(b);
字典a=新字典();
SortedDictionary b=新的SortedDictionary();
剂量测定法(a);
剂量测定法(b);

根据您前面的问题和答案中的讨论,我猜您会问更多关于继承而不是使用的问题

如果您对字典的实现方式感到满意,那么从字典实现就可以了。如果您想更改某些内容,那么实现IDictionary会更好

IMHO如果要用“new”覆盖现有成员,那么最好实现接口,而不是从原始类继承