悄然无声的 Blog
不是我不明白,这世界变化快!

注:本文仅供菜鸟和初级入门者参考,欢迎高手指导,切勿拍砖,兄弟身子骨单薄,承受不起。博客园原创文章,转载请注明作者和出处!

第一部分,我们模仿类库,先抽象出容器(集合)类数据结构中所需要的最基本的一些接口,但是暂不实现他们。这些接口所代表的功能十分有限,只是作为数据结构的入门和理解使用,以后也可以在此基础上自行继续扩充。

在给出代码前先大体说明一下思路:

1、首先定义一个 My 命名空间,目的是为了避免与类库中的容器类相冲突,以后自定义的数据结构类都放在这个空间里

2、定义一个 Collections 空间 ,它将包含基本接口、数组类、链表类、栈、队列等等一切和容器(集合)有关的接口和类

3、自定义一个异常类 CollectionsException,在 Collections 空间里发生什么怪事情,它都会蹦出来

4、定义 ICollection<T> 接口,它抽象出了一些操作容器(集合)的最基本操作,如添加、删除、清空等等,这些操作不用给出过多解释,一看名称就知道是什么意思了。另外, ICollection<T> 接口继承了类库中的 IEnumerable<T> 接口,目的是为了在后面可以使用 foreach 语句

5、定义 IList<T>  接口,他继承并扩展了上面的 ICollection<T> 接口,也都是最基本的操作,主要是把和索引 Index 有关的操作放在这里

6、定义 ISortable<T>  接口,所有实现了这个接口的容器(集合)类都将可以排序

7、定义 ISort<T>  接口,为不同的排序算法抽象出的公共接口

不多说了,看看代码就什么都明白了,很简单的,代码如下

Collections.cs

using System;
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 IsEmptyget;}//是否为空
            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;
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);//将集合传入并排序
        }

      }

}


这样,我们定义好了一些最基本的接口,下一节就可以用他们来封装数组了。

未完待续。。。。。。

posted on 2005-09-06 20:15  左洸  阅读(1386)  评论(1编辑  收藏  举报