注:本文仅供菜鸟和初级入门者参考,欢迎高手指导,切勿拍砖,兄弟身子骨单薄,承受不起。博客园原创文章,转载请注明作者和出处!
第一部分,我们模仿类库,先抽象出容器(集合)类数据结构中所需要的最基本的一些接口,但是暂不实现他们。这些接口所代表的功能十分有限,只是作为数据结构的入门和理解使用,以后也可以在此基础上自行继续扩充。
在给出代码前先大体说明一下思路:
1、首先定义一个 My 命名空间,目的是为了避免与类库中的容器类相冲突,以后自定义的数据结构类都放在这个空间里
2、定义一个 Collections 空间 ,它将包含基本接口、数组类、链表类、栈、队列等等一切和容器(集合)有关的接口和类
3、自定义一个异常类 CollectionsException,在 Collections 空间里发生什么怪事情,它都会蹦出来
4、定义 ICollection<T> 接口,它抽象出了一些操作容器(集合)的最基本操作,如添加、删除、清空等等,这些操作不用给出过多解释,一看名称就知道是什么意思了。另外, ICollection<T> 接口继承了类库中的 IEnumerable<T>
5、定义 IList<T> 接口,他继承并扩展了上面的 ICollection<T> 接口,也都是最基本的操作,主要是把和索引 Index 有关的操作放在这里
6、定义 ISortable<T> 接口,所有实现了这个接口的容器(集合)类都将可以排序
7、定义 ISort<T> 接口,为不同的排序算法抽象出的公共接口
不多说了,看看代码就什么都明白了,很简单的,代码如下
Collections.cs
using System.Collections.Generic;
using System.Text;
namespace My
{
namespace Collections
{
//自定异常类
public class CollectionsException : Exception
{
public CollectionsException(string strInfo) : base(strInfo) { }
}
// ICollection<T> 接口,继承了 IEnumerable<T> 接口
public interface ICollection<T> : IEnumerable<T>
{
void Add(T data);//添加
void Clear();//清空
int Count { get;}//返回当前元素个数
bool Find(T data);//查找
bool IsEmpty{ get;}//是否为空
void Remove(T data);//查找并删除第一个 data
void RemoveAll(T data);//查找并删除所有 data
}
// IList 接口,继承并扩展了 ICollection 接口,和索引 Index 有关的操作全在这里
public interface IList<T> : ICollection<T>
{
int IndexOf(T data);//查找并返回某一数据的位置
void Insert(int index, T data);//在某一位置插入一个数据
void RemoveAt(int index);//删除某一位置的数据
T this[int index] { get;set;}//对某一位置进行存取操作
}
}
}
将和排序有关的代码放在另一个文件里,方便管理
Sort.cs
using System.Collections.Generic;
using System.Text;
namespace My
{
namespace Collections
{
//实现这个接口的类将可以排序
public interface ISortable<T>
{
ISort<T> Sort { set;}//选择一个排序类
void DoSort();//调用所选择排序类的排序方法
}
// ISort 接口,可以用不同的排序方法实现它
public interface ISort<T>
{
void Do(IList<T> list);//将集合传入并排序
}
}
}
这样,我们定义好了一些最基本的接口,下一节就可以用他们来封装数组了。
未完待续。。。。。。