C#快速实现IList非泛型类接口的自定义类作为数据源

作者:河西石头 时间:2022-10-09 20:28:24 

使用可以绑定数据源的控件我们需要有实现了IList接口的类作为数据源,我们有很多的方法,比如使用ArrayList或者List的泛型类都是很方便的,或者不怕麻烦的索性直接上DataTable。
但我们也许想实现一个专用于某个自己定义的对象的list类,这样其他类想错误的加入这个list都不可能了。

一、利用VS的修补程序快速继承IList

假定我有一个Creature的类,如果我们直接在上面加上接口的继承,则会出现报错提示,如下图:

C#快速实现IList非泛型类接口的自定义类作为数据源

说明,这些接口成员都是必须实现的。
我们来一一实现,其实也不必要,因为我们只是借用它的接口让Creature类成为一个可以充当数据源DataSource的类。

我们点击最下面的显示可能的修补程序(Alt+Enter即可),然后点预览,可以根据自己的需要修改。

C#快速实现IList非泛型类接口的自定义类作为数据源

如果不需要特别的修改,基本直接应用即可,只是不能应用到数据源绑定上。表面上看这样这个类就实现了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

我们来看看效果:

C#快速实现IList非泛型类接口的自定义类作为数据源

这里我们测试了三种绑定数据源的控件,分别是ListBox,ComboBox,DataGridView ,没有发现任何问题,是不是特别的容易!

来源:https://haigear.blog.csdn.net/article/details/128771648

标签:C#,IList,数据源
0
投稿

猜你喜欢

  • SpringBoot深入浅出分析初始化器

    2022-07-06 09:05:59
  • c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解

    2023-01-26 04:59:46
  • 一文看懂RabbitMQ消息丢失如何防止

    2022-03-03 20:36:24
  • Android Activity之间传递图片(Bitmap)的方法

    2021-05-29 03:46:55
  • java模拟微信抢红包的实例代码

    2021-12-08 19:51:21
  • Android判断包名和类名是否存在的方法

    2021-09-23 02:52:52
  • Eclipse下基于Java的OpenCV开发环境配置教程

    2022-01-30 21:02:54
  • Android四大组件之广播BroadcastReceiver详解

    2023-03-29 23:41:14
  • 使用Jetpack Compose实现翻转卡片效果流程详解

    2022-01-24 16:26:55
  • Spring Cache抽象-使用SpEL表达式解析

    2023-08-23 11:46:44
  • 常用Eclipse快捷方式(推荐)

    2022-01-22 04:37:56
  • Springboot中加入druid连接池

    2023-08-08 05:47:22
  • Spring Cloud Alibaba 整合Nacos的详细使用教程

    2022-10-19 22:18:00
  • ExpandableListView实现二级列表购物车

    2022-07-27 05:54:13
  • Java运算符从见过到掌握下

    2023-01-29 15:47:19
  • Spring集成jedis的配置与使用简单实例

    2023-07-02 04:11:39
  • java 算法之希尔排序详解及实现代码

    2022-07-12 23:09:45
  • Android仿百度福袋红包界面

    2023-11-01 04:53:01
  • SpringBoot整合WebService服务的实现代码

    2021-11-11 14:59:11
  • 关于bootstrap.yml和bootstrap.properties的优先级问题

    2021-10-04 11:50:30
  • asp之家 软件编程 m.aspxhome.com