构建可反转排序的泛型字典类(5)--实现IEnumerable接口

5. 实现IEnumerable<KeyValuePair<TKey, TValue>>接口

我们先来看看ReversibleSortedList类的定义:

public class ReversibleSortedList<TKey, TValue> :
IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>,
IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable

它一共实现了6个接口。但从本质上来说,实现IDictionary<TKey, TValue>接口和IDictionary接口就等同于实现了以上6个接口。因为 IDictionary<TKey, TValue>继承自 ICollection<KeyValuePair<TKey, TValue>>和 IEnumerable<KeyValuePair<TKey, TValue>>接口,而IDictionary 接口继承自ICollection和IEnumerable接口。下面我们来看一下这些接口的关系 图:

时间: 2024-09-03 04:33:06

构建可反转排序的泛型字典类(5)--实现IEnumerable接口的相关文章

构建可反转排序的泛型字典类(7)--实现IDictionary接口

7. 实现IDictionary接口 前面做了很多努力,现在终于可以实现 IDictionary接口了.当然,之所以要先实现它,目的之一还是为了之前留下的 一点遗憾:在foreach中使用DictionaryEntry访问集合中的元素. 需要 注意,由于ReversibleSortedList类最主要的接口是泛型IDictionary接口,实 现非泛型IDictionary接口主要是考虑到兼容性,试想,你的项目是用.NET 1.0 实现的,但现在你需要使用.NET 2.0继续完善程序并使用到了一

构建可反转排序的泛型字典类(8)--实现IDictionary接口

8. 实现IDictionary<TKey, TValue>接口 由于前面实现了 IDictionary接口,现在实现IDictionary<TKey, TValue>也就没什么困难 的了,照葫芦画瓢. 首先改变类声明: public class ReversibleSortedList<TKey, TValue> :IDictionary<TKey, TValue> IDictionary, IEnumerable<KeyValuePair<T

构建可反转排序的泛型字典类(1)--雏形

构建可反转排序的泛型字典类 前言 前段时间为了查找泛型资料,我翻译了O'Reilly 出版的<C# Cookbook>这本书的几个关于泛型的章节.其中"4.8 反转Sorted List里的内容"(见 http://cgbluesky.blog.163.com/blog/static/2412355820081211016581/ )这一节中有一个接近1300行代码的例子.当时看到这个例子吓了一跳,这是一个足以让人头晕眼花的数字.粗略看了一下,感觉代码质量非常高,非常值得我

构建可反转排序的泛型字典类(9完)--完善

9. 完善 大楼已经盖好,剩下的工作就是装修,装修好就可以入住了 .从本文的题目得知,这是一个可反转排序的集合类,但我们只实现了降序插入 功能,如果希望把升序转换为降序该怎么办呢?此例的解决方法是声明一个代表 排序方向的属性Comparer,并加入一个sort方法,调用sort方法时根据Comparer 属性进行排序: private ListSortDirection _currentSortDirection = ListSortDirection.Descending; public So

构建可反转排序的泛型字典类(4)--IDictionary接口

C#对集合类型有统一的规范.它的好处不言而喻,所有集合类都有一些统一的调用方法和属性,这使得学习成本大大降低.统一的规范就是通过接口来实现的(关于接口,如果不熟,请参考 http://www.enet.com.cn/eschool/video/c/30.shtml ),另一方面一些类也会直接调用这些标准接口,使得我们写出来的类有更好的兼容性.最典型的例子莫过于IEnumerable接口,只要实现了它就可以使用foreach语句进行调用. 我们将要给ReversibleSortedList实现的是

构建可反转排序的泛型字典类(2)--排序方向

2. 排序方向 你希望ReversibleSortedList类中的元素是以TKey(键)的顺序进行存储的,并且它即可以从小排到大,也可以从大排到小.当然,最佳方式就是在添加元素时找到合适的位置插入,插入后元素就已经按顺序排好.在一个有序数组中查找合适的插入点这样的算法并不困难,但FCL已经帮我们实现了,而且是采用速度最快的二分查找法(在MSDN中被称为"二进制搜索法").太棒了!它就是:静态方法Array.BinarySearch.下面我们来看MSDN中对它的介绍. Array.Bi

构建可反转排序的泛型字典类(3)--实现元素添加及自动扩展

3. 实现元素添加及自动扩展 您是一单位CEO,单位占地50亩,这几年在你的带领下,公司不断发展壮大,原来50亩地已经不够用.公司急需扩大地盘,这个现实问题摆在你面前,该怎么办?到旁边单位抢地?不行,现在是法制社会.有两个解决方案,第一是买一块50亩的地,这样你的公司就有两个办公地点,缺点是不能统一管理,两个地点的员工交流不顺畅.第二是买一块100亩的地,把原来的地卖掉,公司全部搬到新地点.这样做的缺点是重建费用太大. 我们要构建的ReversibleSortedList集合也面临着这样的问题,

构建可反转排序的泛型字典类(6)--实现IDictionary接口中的Keys和Values属性

6. 实现IDictionary接口中的Keys和Values属性 现在我们可以着眼于IDictionary接口的实现.第4节中,专门针对这个接口做了一 个最简化的例子,我们来回顾一下,它是怎么实现IDictionary接口中的Keys和Values属性的. public ICollection Keys { //返回所有键的集合 get { //把所有键的集合拷贝到新数组中并返回 Object[] keys = new Object[ItemsInUse]; for (Int32 n = 0;

绑定子类的泛型基类,反模式?

 这次总结一个个人认为的反模式:"绑定子类的泛型层基类",这个模式在一些著名的框架中也见到过,如果CSLA.BlogEngine.我自己在原来的写的框架中,也用到过.     当然了,个人认为是反模式,各们同仁并不一定这样认为,仁者见仁,智者见智了.不过我好几次都是受尽折磨,所以决定写出来给大家分享下心得.   模式介绍     "层基类"是MF提出的一个基本模式,详见:<Layer Supertype>.这种模式在经典的层次型架构设计的实现中,是极其重