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是一个您从中继承的抽象基架实现。