iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在C#项目中实现一个带通知的List<T>
  • 831
分享到

怎么在C#项目中实现一个带通知的List<T>

2023-06-06 14:06:45 831人浏览 泡泡鱼
摘要

怎么在C#项目中实现一个带通知的List<T>?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现using System;using Syste

怎么在C#项目中实现一个带通知的List<T>?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

实现

using System;using System.Collections.Generic;using System.Linq;namespace XXX.XXX.Core.Utils{  public class ItemsChangedEventArgs<T> : EventArgs  {    public IList<T> RemovedItems { get; private set; }    public IList<T> AddedItems { get; private set; }    public ItemsChangedEventArgs(IList<T> removedItems, IList<T> addItems)    {      RemovedItems = removedItems;      AddedItems = addItems;    }  }  public delegate void ListItemsChangedEventHandler<T>(object sender, ItemsChangedEventArgs<T> args);  public class NotifyList<T> : List<T>  {    public static NotifyList<T> Empty    {      get { return new NotifyList<T>(); }    }    public event ListItemsChangedEventHandler<T> ItemsChanged;    protected void OnItemsChanged(IList<T> removedItems, IList<T> addedItems)    {      ListItemsChangedEventHandler<T> temp = ItemsChanged;      temp?.Invoke(this, new ItemsChangedEventArgs<T>(removedItems, addedItems));    }    public new void Add(T item)    {      base.Add(item);      OnItemsChanged(Empty, new List<T> { item });    }    public new void AddRange(IEnumerable<T> collection)    {      base.AddRange(collection);      OnItemsChanged(Empty, collection.ToList());    }    public new void Clear()    {      T[] array = new T[this.Count];      this.CopyTo(array);      base.Clear();      OnItemsChanged(array.ToList(), Empty);    }    public new bool Remove(T item)    {      bool ret = base.Remove(item);      if (ret) OnItemsChanged(new List<T> { item }, Empty);      return ret;    }    public new int RemoveAll(Predicate<T> match)    {      IList<T> removedItems = FindAll(match);      int count = base.RemoveAll(match);      if (removedItems.Count != count)      {        throw new Exception("[NotifyList][RemoveAll][The number of elements found by the predicate does not match the number of elements removed.]");      }      OnItemsChanged(removedItems, Empty);      return count;    }    public new void RemoveAt(int index)    {      T removedItem = this[index];      base.RemoveAt(index);      OnItemsChanged(new List<T> { removedItem }, Empty);    }    public new void RemoveRange(int index, int count)    {      IEnumerable<T> range = this.Skip(index + 1).Take(count);      base.RemoveRange(index, count);      OnItemsChanged(range.ToList(), Empty);    }  }}

 注意事项

  1 基类中Add这些方法都是非虚方法,这里不能使用重载,所以在自己实现的每一个方法中需要使用 new 关键字进行覆盖。

       2  在具体使用的时候需要订阅ItemsChanged事件。

看完上述内容,你们掌握怎么在C#项目中实现一个带通知的List<T>的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在C#项目中实现一个带通知的List<T>

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

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

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

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

下载Word文档
猜你喜欢
  • 怎么在C#项目中实现一个带通知的List<T>
    怎么在C#项目中实现一个带通知的List<T>?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现using System;using Syste...
    99+
    2023-06-06
  • 怎么在JAVA项目中实现一个UDP网络通讯功能
    今天就跟大家聊聊有关怎么在JAVA项目中实现一个UDP网络通讯功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体如下:UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用...
    99+
    2023-05-31
    java udp ava
  • 怎么在JAVA项目中实现一个TCP网络通讯功能
    怎么在JAVA项目中实现一个TCP网络通讯功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:TCP(Transmission Control Prot...
    99+
    2023-05-31
    java tcp ava
  • 如何在c#项目中实现一个winform主题
    如何在c#项目中实现一个winform主题?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一个接口,需要做主题的控件、窗体都要实现这个接口/// <summa...
    99+
    2023-06-06
  • 如何在C++项目中实现一个aligned_malloc方法
    这篇文章将为大家详细讲解有关如何在C++项目中实现一个aligned_malloc方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。malloc的默认行为int main(){&n...
    99+
    2023-06-07
  • 怎么在Android项目中添加一个强制下线通知功能
    这篇文章将为大家详细讲解有关怎么在Android项目中添加一个强制下线通知功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体内容如下:package com.itheima74...
    99+
    2023-05-31
    android 下线 roi
  • 如何在C++项目中实现一个取余运算
    如何在C++项目中实现一个取余运算?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、C++中的整数除法C++中整数除法和取余用的是truncate除法(舍0取整),而给无符号类...
    99+
    2023-06-06
  • 怎么在java项目中实现一个链栈存储
    本篇文章给大家分享的是有关怎么在java项目中实现一个链栈存储,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如下所示:package com.learn.algorithm.l...
    99+
    2023-05-31
    java 链栈存储 ava
  • 怎么在Java项目中实现一个分页功能
    怎么在Java项目中实现一个分页功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。分页对象public class PageUtils imp...
    99+
    2023-05-31
    java ava 目中
  • 怎么在java项目中实现一个单例模式
    这篇文章将为大家详细讲解有关怎么在java项目中实现一个单例模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java设计模式之单例模式定义:如果一个类始终只能创建一个实例,那么这个类被称为...
    99+
    2023-05-31
    java 单例模式 ava
  • 怎么在JAVA项目中实现一个静态单例
    怎么在JAVA项目中实现一个静态单例?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JAVA  静态的单例的实例详解实现代码:public c...
    99+
    2023-05-31
    java 单例 ava
  • 怎么在html5项目中实现一个录音功能
    这篇文章给大家介绍怎么在html5项目中实现一个录音功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。步骤1由于新的api是通过navigator.mediaDevices.getUserMedia,且返回一个prom...
    99+
    2023-06-09
  • 怎么在vue项目中实现一个竖向表格
    怎么在vue项目中实现一个竖向表格?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,...
    99+
    2023-06-14
  • 怎么在Java项目中实现一个策略模式
    怎么在Java项目中实现一个策略模式?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且...
    99+
    2023-05-31
    java ava 策略模式
  • 怎么在java项目中实现一个海盗算法
    今天就跟大家聊聊有关怎么在java项目中实现一个海盗算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。具体方法如下:package unit4;public cl...
    99+
    2023-05-31
    java 海盗算法 ava
  • 怎么在Vue.js中实现一个带下拉选项的输入框
    这篇文章将为大家详细讲解有关怎么在Vue.js中实现一个带下拉选项的输入框,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。注册组件通过将封装好的组件代码复制粘贴来注册全局组件。设计的时候有考虑...
    99+
    2023-06-14
  • 怎么在Java项目中实现一个堆排序算法
    怎么在Java项目中实现一个堆排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。堆是数据结构中的一种重要结构,了解“堆”的概念和操作,可以帮助我们快速地掌握堆排序。堆的...
    99+
    2023-05-31
    java 堆排序算法 ava
  • 怎么在Java项目中实现一个观察者模式
    怎么在Java项目中实现一个观察者模式?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。观察者模式:对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象(被观察)。...
    99+
    2023-05-31
    java 观察 观察者模式
  • JAVA项目中怎么实现一个通用日志记录功能
    今天就跟大家聊聊有关JAVA项目中怎么实现一个通用日志记录功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用Aop记录操作日志添加Aoppublic class LogAopHa...
    99+
    2023-05-31
    java ava
  • 通过在android项目中使用MediaRecorder实现一个录音功能
    这篇文章将为大家详细讲解有关通过在android项目中使用MediaRecorder实现一个录音功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MainActivitypackage co...
    99+
    2023-05-31
    mediarecorder android roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作