悄然无声的 Blog
不是我不明白,这世界变化快!
posts - 113,comments - 713,views - 34万

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

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

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

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   左洸  阅读(1389)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
< 2005年9月 >
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示