广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#集合之自定义集合类
  • 228
分享到

C#集合之自定义集合类

2024-04-02 19:04:59 228人浏览 泡泡鱼
摘要

一、非泛型方式,继承自CollectionBase public class MyClass { public static void Main() {

一、非泛型方式,继承自CollectionBase

public class MyClass
{
    public static void Main()
    {
        StrinGCollection myStringCol = new StringCollection();
        myStringCol.Add("a");
        myStringCol.Add("b");
        Console.Write(myStringCol[0]);
        foreach (string myAnimal in myStringCol)
        {
            Console.Write(myAnimal);
        }
        Console.ReadKey();
    }
}
//自定义集合类
public class StringCollection : CollectionBase
{
    public void Add(string newAnimal)
    {
        List.Add(newAnimal);
    }

    public void Remove(string newAnimal)
    {
        List.Remove(newAnimal);
    }

    public StringCollection() { }

    public string this[int animalIndex]
    {
        get { return (string)List[animalIndex]; }
        set { List[animalIndex] = value; }
    }
}

二、泛型方式,继承自Collection<T>

下面的代码示例演示如何从构造类型的派生集合类Collection<T>泛型类,以及如何重写受保护InsertItem, RemoveItem, ClearItems,和SetItem方法,以提供自定义行为Add, Insert, Remove,和Clear方法,并设置Item[Int32]属性。
此示例中提供的自定义行为是Changed每个受保护方法结束时引发的通知事件。
Dinosaurs类继承Collection<string>,并定义Changed事件,使用DinosaursChangedEventArgs类用于事件信息和使用枚举标识的更改种类。

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

public class Dinosaurs : Collection<string>
{
    public event EventHandler<DinosaursChangedEventArgs> Changed;

    protected override void InsertItem(int index, string newItem)
    {
        base.InsertItem(index, newItem);

        EventHandler<DinosaursChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new DinosaursChangedEventArgs(
                ChangeType.Added, newItem, null));
        }
    }

    protected override void SetItem(int index, string newItem)
    {
        string replaced = Items[index];
        base.SetItem(index, newItem);

        EventHandler<DinosaursChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new DinosaursChangedEventArgs(
                ChangeType.Replaced, replaced, newItem));
        }
    }

    protected override void RemoveItem(int index)
    {
        string removedItem = Items[index];
        base.RemoveItem(index);

        EventHandler<DinosaursChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new DinosaursChangedEventArgs(
                ChangeType.Removed, removedItem, null));
        }
    }

    protected override void ClearItems()
    {
        base.ClearItems();

        EventHandler<DinosaursChangedEventArgs> temp = Changed;
        if (temp != null)
        {
            temp(this, new DinosaursChangedEventArgs(
                ChangeType.Cleared, null, null));
        }
    }
}

// Event argument for the Changed event.
//
public class DinosaursChangedEventArgs : EventArgs
{
    public readonly string ChangedItem;
    public readonly ChangeType ChangeType;
    public readonly string ReplacedWith;

    public DinosaursChangedEventArgs(ChangeType change, string item, 
        string replacement)
    {
        ChangeType = change;
        ChangedItem = item;
        ReplacedWith = replacement;
    }
}

public enum ChangeType
{
    Added, 
    Removed, 
    Replaced, 
    Cleared
};

public class Demo
{
    public static void Main()
    {
        Dinosaurs dinosaurs = new Dinosaurs();

        dinosaurs.Changed += ChangedHandler; 

        dinosaurs.Add("Psitticosaurus");
        dinosaurs.Add("Caudipteryx");
        dinosaurs.Add("Compsognathus");
        dinosaurs.Add("Muttaburrasaurus");

        Display(dinosaurs);
    
        Console.WriteLine("\nIndexOf(\"Muttaburrasaurus\"): {0}", 
        dinosaurs.IndexOf("Muttaburrasaurus"));

        Console.WriteLine("\nContains(\"Caudipteryx\"): {0}", 
        dinosaurs.Contains("Caudipteryx"));

        Console.WriteLine("\nInsert(2, \"Nanotyrannus\")");
        dinosaurs.Insert(2, "Nanotyrannus");

        Console.WriteLine("\ndinosaurs[2]: {0}", dinosaurs[2]);

        Console.WriteLine("\ndinosaurs[2] = \"Microraptor\"");
        dinosaurs[2] = "Microraptor";

        Console.WriteLine("\nRemove(\"Microraptor\")");
        dinosaurs.Remove("Microraptor");

        Console.WriteLine("\nRemoveAt(0)");
        dinosaurs.RemoveAt(0);

        Display(dinosaurs);
    }
    
    private static void Display(Collection<string> cs)
    {
        Console.WriteLine();
        foreach( string item in cs )
        {
            Console.WriteLine(item);
        }
    }

    private static void ChangedHandler(object source, 
    DinosaursChangedEventArgs e)
    {

        if (e.ChangeType==ChangeType.Replaced)
        {
            Console.WriteLine("{0} was replaced with {1}", e.ChangedItem, 
            e.ReplacedWith);
        }
        else if(e.ChangeType==ChangeType.Cleared)
        {
            Console.WriteLine("The dinosaur list was cleared.");
        }
        else
        {
            Console.WriteLine("{0} was {1}.", e.ChangedItem, e.ChangeType);
        }
    }
}

到此这篇关于C#集合之自定义集合类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#集合之自定义集合类

本文链接: https://www.lsjlt.com/news/147921.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#集合之自定义集合类
    一、非泛型方式,继承自CollectionBase public class MyClass { public static void Main() { ...
    99+
    2022-11-13
  • C#自定义集合初始化器
    对int类型集合初始化,这样写: static void Main(string[] args) { var list = n...
    99+
    2022-11-13
    C# 自定义集合 集合初始化器
  • WCF如何自定义集合
    这篇文章主要为大家展示了“WCF如何自定义集合”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“WCF如何自定义集合”这篇文章吧。利用WSE(Web Service Enhancements)可以为...
    99+
    2023-06-17
  • C#集合之不变集合的用法
    如果对象可以改变其状态,就很难在多个同时运行的任务中使用。这些集合必须同步。如果对象不能改变器状态,就很容易在多个线程中使用。Microsoft提供了一个新的集合库:Microsof...
    99+
    2022-11-13
  • C#集合之并发集合的用法
    .NET 4 开始,在System.Collection.Concurrent中提供了几个线程安全的集合类。线程安全的集合可防止多个线程以相互冲突的方式访问集合。为了对集合进行线程安...
    99+
    2022-11-13
  • C#集合之可观察集合的用法
    如果需要集合中的元素何时删除或添加的信息,可以使用ObservableCollection<T>类。这个类是为WPF定义的,这样UI就可以得知集合的变化。这个类在程序集W...
    99+
    2022-11-13
  • C#集合之集(set)的用法
    包含不重复元素的集合称为“集(set)”。.NET Framework包含两个集HashSet<T>和SortedSet<T>,它们都...
    99+
    2022-11-13
  • C#中IEnumerable接口介绍并实现自定义集合
    简介 IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。对于所有数组的遍历,都来自...
    99+
    2022-11-13
  • Scala集合怎么定义
    这篇文章主要讲解了“Scala集合怎么定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala集合怎么定义”吧!Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。Scala ...
    99+
    2023-06-19
  • jquery如何定义集合
    在jquery中定义集合的方法:1.新建html项目,引入jquery;2.定义object对象,并赋值;3.使用var关键字定义集合,并对象赋值;具体步骤如下:首先,在新建一个html项目,在项目中引入jquery;<script ...
    99+
    2022-10-21
  • C#泛型集合类System.Collections.Generic
    目录一、定义泛型类二、从泛型类继承三、定义泛型运算符四、定义泛型结构五、定义泛型接口六、定义泛型方法1、普通类2、泛型类七、定义泛型委托1、通过泛型委托,委托的参数可以在以后定义。2...
    99+
    2022-11-13
  • Mybatis-Plus自定义集合类型的类型处理器详解
    目录1.配合xml文件2.手动注册两种方法,第一种很麻烦,对mp自带的插入操作有限制,后来改为更简洁的第二种方法 1.配合xml文件 TypeHandler @Slf4j @Map...
    99+
    2022-11-12
  • Mybatis-Plus怎么自定义集合类型的类型处理器
    这篇文章主要讲解了“Mybatis-Plus怎么自定义集合类型的类型处理器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis-Plus怎么自定义集合类型的类型处理器”吧!1.配合x...
    99+
    2023-06-26
  • C#集合之栈的用法
    栈(Stack)和队列是非常类似的一个容器,只是栈是一个后进先出(LIFO)的容器。栈用Push()方法在栈中添加元素,用Pop()方法获取最近添加的一个元素: Stack<...
    99+
    2022-11-13
  • Java集合类之Map集合的特点及使用详解
    目录1、Map集合概述和使用1.1 Map集合概述1.2 Map集合常用方法1.3 Map集合的遍历1、Map集合概述和使用 1.1 Map集合概述 java.util接口 Map&...
    99+
    2022-11-13
  • 如何集合Bootstrap自定义confirm提示效果
    这篇文章将为大家详细讲解有关如何集合Bootstrap自定义confirm提示效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js端var Common&nb...
    99+
    2022-10-19
  • C#集合之列表的用法
    目录1.创建列表2.添加元素3.插入元素4.访问元素5.删除元素6.搜索7.排序8.类型转换9.只读集合.NET Framework为动态列表List提供泛型类List<T&g...
    99+
    2022-11-13
  • C#集合之队列的用法
    队列是其元素按照先进先出(FIFO)的方式来处理的集合。队列使用System.Collections.Generic名称空间中的泛型类Queue<T>实现。在内部,Que...
    99+
    2022-11-13
  • C#集合之链表的用法
    LinkedList<T>是一个双向链表,其元素会指向它前面和后面的元素。这样,通过移动到下一个元素可以正向遍历链表,通过移动到前一个元素可以反向遍历链表。 链表在存储...
    99+
    2022-11-13
  • C#集合之字典的用法
    字典表示一种复杂的数据结构,这种数据结构允许按照某个键来访问元素。字典也称为映射或散列表。字典的主要特性是能根据键快速查找值。也可以自由添加和删除元素,这有点像List<T&g...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作