如何在C#中实现一个自定义的集合类?

如何在C#中实现一个自定义的集合类?

编码文章call10242025-02-09 12:02:1015A+A-

在 C# 中实现一个自定义集合类通常需要定义一个类,该类实现一个或多个集合相关的接口,比如 IEnumerable、ICollection 或 IList。以下是一个简单示例,展示如何创建一个自定义集合类:


示例:自定义集合类CustomCollection

using System;
using System.Collections;
using System.Collections.Generic;

public class CustomCollection : ICollection
{
    private List items = new List();

    // ICollection 属性
    public int Count => items.Count;
    public bool IsReadOnly => false;

    // 添加元素
    public void Add(T item)
    {
        items.Add(item);
    }

    // 清空集合
    public void Clear()
    {
        items.Clear();
    }

    // 判断是否包含某个元素
    public bool Contains(T item)
    {
        return items.Contains(item);
    }

    // 将集合的内容复制到数组
    public void CopyTo(T[] array, int arrayIndex)
    {
        items.CopyTo(array, arrayIndex);
    }

    // 移除元素
    public bool Remove(T item)
    {
        return items.Remove(item);
    }

    // 获取迭代器
    public IEnumerator GetEnumerator()
    {
        return items.GetEnumerator();
    }

    // 非泛型迭代器
    IEnumerator IEnumerable.GetEnumerator()
    {
        return items.GetEnumerator();
    }

    // 额外的功能:按索引访问
    public T this[int index]
    {
        get => items[index];
        set => items[index] = value;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建自定义集合
        CustomCollection collection = new CustomCollection();

        // 添加元素
        collection.Add("Alice");
        collection.Add("Bob");
        collection.Add("Charlie");

        // 遍历集合
        Console.WriteLine("Elements in the collection:");
        foreach (var item in collection)
        {
            Console.WriteLine(item);
        }

        // 检查是否包含某个元素
        Console.WriteLine($"Collection contains 'Bob': {collection.Contains("Bob")}");

        // 移除元素
        collection.Remove("Bob");
        Console.WriteLine($"Collection contains 'Bob' after removal: {collection.Contains("Bob")}");
    }
}

关键点解析

  1. 基础存储:使用内部数据结构(如 List)存储集合元素。
  2. 实现接口:ICollection 是基本的集合接口,提供集合的增删、查询和遍历功能。实现 IEnumerable 可以使集合支持 foreach 遍历。
  3. 索引器:提供按索引访问元素的能力,通常用在更高级的集合类型(如 IList)。
  4. 自定义逻辑:可以在方法中添加业务逻辑,比如自定义排序规则、去重操作等。

接口选择的依据

根据集合的用途和复杂性,可以选择实现不同的接口:

接口

描述

IEnumerable

支持集合的迭代,例如 foreach 循环。

ICollection

提供集合的基本操作,例如添加、删除、计数。

IList

提供按索引访问的能力,同时继承了 ICollection

IDictionary

键值对集合,类似于 Dictionary


使用场景

  1. 封装特定逻辑:当需要对集合元素的添加、移除、查询等操作添加特定逻辑时,可以创建自定义集合。
  2. 扩展现有集合功能:当内置集合无法满足特定需求(如自定义排序、线程安全等)时,可以创建自定义集合类。
  3. 领域特定需求:当集合需要与业务领域紧密结合时,例如实现一个只接受特定类型对象的集合。

通过实现自定义集合类,可以更灵活地满足特殊的需求,同时还能够重用标准集合接口的便利功能。这种设计既能保证与 C# 的集合生态兼容,又能添加特定业务逻辑。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4