Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
Java的等价物是什么;C#中的抽象映射?_C#_Java_Collections_Dictionary - Fatal编程技术网

Java的等价物是什么;C#中的抽象映射?

Java的等价物是什么;C#中的抽象映射?,c#,java,collections,dictionary,C#,Java,Collections,Dictionary,我需要创建一个对象来公开一个IDictionary接口,但我不想填充整个接口实现 拥有Java的AbstractDictionary的等价物会很好,这使得您几乎不需要推动一个完整的字典(Java中的HashMap): 如果不需要迭代集合,则可以实现一个方法(TryGetValue) 如果希望它是可写的,可以实现另一个条目(Add) System.Collections.Generic命名空间包含IDictionary的三种实现:Dictionary、SortedDictionary和Sorte

我需要创建一个对象来公开一个
IDictionary
接口,但我不想填充整个接口实现

拥有Java的AbstractDictionary的等价物会很好,这使得您几乎不需要推动一个完整的字典(Java中的HashMap):

  • 如果不需要迭代集合,则可以实现一个方法(TryGetValue)
  • 如果希望它是可写的,可以实现另一个条目(Add)

System.Collections.Generic
命名空间包含
IDictionary
的三种实现:
Dictionary
SortedDictionary
SortedList
如果我在构建自己的字典类,我将从System.Collections.ObjectModel.KeyedCollection继承

为所有不了解API设计的人编辑

永远不要从公共属性或函数返回泛型列表或字典。Insead应该返回一个专门为此目的构建的类。通过这种方式,您可以在以后向其添加其他功能

Dictionay<integer, Order> Orders() {get;}
CustomerOrders Orders() {get;}
Dictionay Orders(){get;}
CustomerOrders Orders(){get;}
在第二个版本中,您可以添加Total属性,并让用户实际找到它

理论上,您可以返回Dictionary的子类来添加Total属性,但是用户必须a.知道您正在这样做,B.包含一个cast来获取属性。

Wintellect的包含一个实现大多数标准IDictionary接口的
DictionaryBase
类()。从课程的文档注释中:

DictionaryBase是一个基类 可以用来更容易地实现 通用索引和 非泛型IDictionary接口

要使用DictionaryBase作为基类, 派生类必须重写Count, GetEnumerator,TryGetValue,清除, 移除,并将索引器设置为访问器


为什么不使用提供的dictionary类?您是否是NET 2之前的版本?ObjectModel.KeyedCollection是一项.NET 2功能,专门为制作自己的字典类的用户添加。
KeyedCollection
仅当键从值派生时才应扩展。IE:person类可能有一个社会保险号,或者数据库记录可能有一个主键。因此,它并不总是一个适合用于字典的基类。我不认为这回答了这个问题-AbstractDictionary是一个您从中继承的抽象基架实现。