C#快速实现IList非泛型类接口的自定义类作为数据源
作者:河西石头 发布时间:2022-10-09 20:28:24
标签:C#,IList,数据源
使用可以绑定数据源的控件我们需要有实现了IList接口的类作为数据源,我们有很多的方法,比如使用ArrayList或者List的泛型类都是很方便的,或者不怕麻烦的索性直接上DataTable。
但我们也许想实现一个专用于某个自己定义的对象的list类,这样其他类想错误的加入这个list都不可能了。
一、利用VS的修补程序快速继承IList
假定我有一个Creature的类,如果我们直接在上面加上接口的继承,则会出现报错提示,如下图:
说明,这些接口成员都是必须实现的。
我们来一一实现,其实也不必要,因为我们只是借用它的接口让Creature类成为一个可以充当数据源DataSource的类。
我们点击最下面的显示可能的修补程序(Alt+Enter即可),然后点预览,可以根据自己的需要修改。
如果不需要特别的修改,基本直接应用即可,只是不能应用到数据源绑定上。表面上看这样这个类就实现了IList接口了,但要用于数据源绑定就必须实现我所列出的5个成员,否则还是不能做为数据源给控件使用。
二、实现必须的成员
#region 做数据绑定必须实现的成员
/// <summary>
/// 添加元素必须的方法
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public int Add(object? value)
{
list.Add(value);
return list.Count;
//throw new NotImplementedException();
}
public int Count { get { return list.Count; } }
public object? this[int index] {
get { return list[index]; }
set { list[index] = value; }
}
/// <summary>
/// 如果要作为DataGridView的数据源,必须实现这个属性
/// </summary>
public bool IsReadOnly { get { return false;}
}
/// <summary>
/// 迭代必须的方法
/// </summary>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public IEnumerator GetEnumerator()
{
return list.GetEnumerator();
//throw new NotImplementedException();
}
#endregion
我们来看看效果:
这里我们测试了三种绑定数据源的控件,分别是ListBox,ComboBox,DataGridView ,没有发现任何问题,是不是特别的容易!
来源:https://haigear.blog.csdn.net/article/details/128771648


猜你喜欢
- 看代码~ //创建socket对象 //第一个参数:设置网
- 在微信公众号里面需要上传头像,时间比较紧,调用学习jssdk并使用 来不及 就用了input1、使用input:file标签, 去调用系统默
- 1.准备工作1、JDK安装2、Maven安装3、Git安装4、jenkins安装以上软件安装成功后进入jenkins进行相关配置。如果需要通
- 实现备份短信到xml文件和像短信中插入一条数据一、实现短信将备份到xml文件中在布局文件中定义一个按钮,定义点击事件为copyClickMa
- 以前的Java项目中充斥了太多不友好的代码:POJO的Getter/Setter/toString等等,这些代码由于没有什么技术含量,影响了
- APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代
- sftp简介sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的
- 本文实例讲述了C#实现回文检测的方法。分享给大家供大家参考。具体分析如下:回文:称正读和反读都相同的字符序列为“回文”,如“abba”、“a
- 一.协程间的通信当需要进行协程间的通信时,可以调用Channel方法,创建一个Channel接口指向的对象,通过调用该对象的send方法和r
- C#控制台程序使用Log4net日志组件,供大家参考,具体内容如下1、Log4net一般都不陌生,但是在配置上不同类型的项目又不相同的地方比
- Java的外部类为什么不能使用private和protected进行修饰对于这个问题,一直没有仔细思考,今天整理一下:对于顶级类(外部类)来
- 本文实例讲述了Java通过在主循环中判断Boolean来停止线程的方法。分享给大家供大家参考,具体如下:package Threads;/*
- “无论是什么类型,所有的数据都是一系列的位,即一系列0和1。变量的含义是通过解释这些数据的方式来传达的。”——这句原话是书上翻译的,不过后一
- java自定义切面增强写代码时会遇到一些有些重复机械的工作, 这个时候就可以运用切面技术来帮我们节约时间介绍如何使用自定义注解增强方法, 实
- 最近项目中使用了mybatis-plus 3.1.1版本,发现使用lambda表达式方式的条件构造器,执行时会报错;但是我用单元测试却通过,
- 想要制作一个简易的登录界面非常容易,总体上来说就是UI布局、给定id、新建跳转的页面、以及输入账号密码的获取与判断,那么接下来就开始制作吧!
- 介绍主要使用了goole的zxing包,下面给出了示例代码,很方便大家的理解和学习,代码都属于初步框架,功能有了,需要根据实际使用情况完善优
- 一、什么是封装?封装就是将属性私有化,提供公有的方法访问私有属性。做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(g
- 历史原因当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈
- 目录1、备份原数据库File文件2、数据库升级XML编写 updateXml.xml3、创建XML解析器3.1 对应工具类 DomUtils