首页 / 软件开发 / C# / 构建可反转排序的泛型字典类(1)--雏形
构建可反转排序的泛型字典类(1)--雏形2010-11-26构建可反转排序的泛型字典类前言前段时间为了查找泛型资料,我翻译了O"Reilly 出版的《C# Cookbook》这本书的几个关于泛型的章节。其中“4.8 反转Sorted List里的内容”(见http://cgbluesky.blog.163.com/blog/static/2412355820081211016581/ )这一节中有一个接近1300行代码的例子。当时看到这个例子吓了一跳,这是一个足以让人头晕眼花的数字。粗略看了一下,感觉代码质量非常高,非常值得我们去学习。于是决定写一系列文章分析它,象搭积木一样逐步把这个ReversibleSortedList构建完成。在读这一篇文章之前,您需要明白一件事:如果只在一个项目里用到这个类,有必要花费1300行代码去构建它吗?我个人的观点是没有必要。FCL(Framework Class Library)中有很多现成的东西,拿过来用就行了。那还有什么理由去研究它呢?我提供以下几点做为参考:l 想通过阅读高质量的代码来提高自己。l 对FCL如此着迷,想通过它迈出第一步。l 您希望自己的代码有机会给其他程序员使用,换句话说,您面向的是程序员,您是一个组件编写者。从某一方面说,您越麻烦,就意味着您的用户越方便。呵呵,不那么多疲话了,开始工作。雏形你想构建一个集合类用于存储数据,它里面的值是成对出现的,每一对值都包含“键”和“值”两个部分。键和值里存放的数据类型是不确定的,最好什么类型放到里面都适用。想起了什么?就是它!泛型!真是太伟大了!接下来要考虑的问题是采用什么样的方式来存储这些值,你觉得自己的数据结构学得还比较好,决定要控制一切。在所有集合类型中,数组的速度是最快的,而且它使用方便并且是类型安全的,唯一的缺点就是容量固定。好!不管那么多了,用的就是它。先把代码写出来再说。public class ReversibleSortedList<TKey, TValue>
{
private TKey[] keys; //键数组
private TValue[] values; //值数组
}
总算迈出了第一步,确定了大的方向。但是数组是容量固定的,如何能让它的容量可以随着元素的增长而自动增长呢?即然要控制容量,那就要有一个容量属性,用于读取和设置容量。先从读取开始,容量值就是数组keys或values的长度。好,继续添加代码:public class ReversibleSortedList<TKey, TValue>
{
private TKey[] keys; //键数组
private TValue[] values; //值数组
public int Capacity //容量属性
{
get
{
return this.keys.Length;
}
}
}