今天学习了给类添加扩展方法,这里记录下。我这记性不好,过不了两天就给忘记了。

下面的例子是给控件ListView类添加三个方法:

1.  AddItemInofStudent  作用是用结构体数据添加新行的数据

2。EditItemInofStudent  用结构体中的数据修改指定的行的数据

3。GetItemToStudent  获得指定行的数据,并填充到结构体中

下面就来实现这三个方法,

首先要创建一个静态类MyListView,扩展方法也要是静态的,在方法的第一个参数要写this ListView list,

表示是哪个类的扩展方法,

示例如下:

1。结构体

public struct Student
{
public int ID;
public string Name;
public string Sex;
public int Age;
public string Tel; }

2。添加的三个静态扩展方法

static class MyListView
{ public static void AddItemInofStudent(this ListView list,Student stu)
{
ListViewItem item = new ListViewItem();
item.Text = stu.ID.ToString();
item.SubItems.Add(stu.Name);
item.SubItems.Add(stu.Sex);
item.SubItems.Add(stu.Age.ToString());
item.SubItems.Add(stu.Tel); list.Items.Add(item);
}
static public void EditItemInofStudent(this ListView list,int nItem, Student stu)
{
list.Items[nItem].SubItems[0].Text = stu.ID.ToString();
list.Items[nItem].SubItems[1].Text = stu.Name;
list.Items[nItem].SubItems[2].Text = stu.Sex;
list.Items[nItem].SubItems[3].Text = stu.Age.ToString();
list.Items[nItem].SubItems[4].Text = stu.Tel;
}
static public Student GetItemToStudent(this ListView list,int nItem)
{
Student stu = new Student();
stu.ID = int.Parse(list.Items[nItem].SubItems[0].Text);
stu.Name = list.Items[nItem].SubItems[1].Text;
stu.Sex = list.Items[nItem].SubItems[2].Text;
stu.Age = int.Parse(list.Items[nItem].SubItems[3].Text);
stu.Tel = list.Items[nItem].SubItems[4].Text; return stu;
}
}

调用:就和ListView类的成员方法一样的调用就行了。

        //实例结构体对像
Student stu = new Student
{
ID = 11,
Name = "张三",
Sex = "男",
Age = 44,
Tel = "13200789"
};
        
      
        //给ListView控件添加新行
listView1.AddItemInofStudent(stu);
stu.ID = 13;
        //修改指定行的数据
listView1.EditItemInofStudent(0,stu);
        //获得指定行的数据
Student stu2 = listView1.GetItemToStudent(0);
       

        stu2.ID = 101;
        listView1.AddItemInofStudent(stu2);

效果图:

总结了一下,用继承的方式的话,在程序中就要用自己继承的类来操作数据了。

C#给类的添加扩展方法的更多相关文章

  1. ..net 3.5新特性之用this关键字为类添加扩展方法

    具体用法如下: public static class ClassHelper { //用this 声明将要吧这个方法附加到Student对象 public static bool CheckName ...

  2. 为system对象添加扩展方法

    ////扩展方法类:必须为非嵌套,非泛型的静态类 public static class DatetimeEx { //通过this声明扩展的类,这里给DateTime类扩展一个Show方法,只有一个 ...

  3. LINQ学习笔记——(1)添加扩展方法

    目的:  对已存在类型的行为进行扩展 注意事项:    扩展方法是一种特殊的静态方法    扩展方法必须在静态类中定义    扩展方法的优先级低于同名的类方法    扩展方法只在特定的命名空间内有效 ...

  4. WebAPi添加常用扩展方法及思维发散

    前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...

  5. C#中this在扩展方法的应用

    给类添加扩展方法 1.定义一个类Service public class Service { private string _name; public string Name { get { retu ...

  6. C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)

    C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

  7. JavaScript学习总结(十四)——JavaScript编写类的扩展方法

    在​J​a​v​a​S​c​r​i​p​t​中​可以使​用​类的p​r​o​t​o​t​y​p​e属性来​扩​展​类的属​性​和​方​法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...

  8. Groovy中如何向已有的类添加新方法

    Groovy 中有多种途径实现向原有类添加方法,具体有如下几种: MOP(meta object protocol) -- 详见 ExpandoMetaClass 扩展方法 -- GDK采用的此方法 ...

  9. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法

    1.认识  __set  (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...

  10. 给 string 添加一个 GetInputStream 扩展方法

    有时候,我们须要读取一些数据,而无论这数据来源于磁盘上的数据文件,还是来源于网络上的数据.于是.就有了以下的 StringExtensions.cs: using System; using Syst ...

随机推荐

  1. Android 7.0 开机时间优化

    原文参考(有删改):https://www.jianshu.com/p/6dba42c022a9 问题描述 开机时间相对参考机过慢,大约慢15s左右.Android 系统7.0. 问题分析 开机问题涉 ...

  2. FreeRtos学习总结

    背景 最近项目需要,花了几天时间学习了FreeRTOS,因为之前有操作系统和底层的基础,所以上手非常快. 正文 基础篇 学习方法:建议先阅读本人整理的文章:再结合FreeRTOS文档官方的全英文档&l ...

  3. P3355 骑士共存问题题解

    题目链接:P3355 骑士共存问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题解: 棋盘问题考虑黑白染色成为二分图后做. 观察马的性质,可知一个点只能到一个异色点,所以,构造 ...

  4. 转-tomcat在控制台打印时乱码

    描述 使用windows的控制台启动tomcat (8.5),Tomcat终端打印出现乱码,在CSDN上找到一个简单有效的解决办法,在此记录. 解决方案 找到Tomcat的根目录下的 /conf/lo ...

  5. vscode插件记录

    前言 vscode因插件而强大. 记录一下好用的插件,以备后续参考. 插件汇总 内容1-14来源于<正点原子 I.MX6U驱动开发指南>4.5节, C/C++,这个肯定是必须的; C/C+ ...

  6. 说说RabbitMQ延迟队列实现原理?

    使用 RabbitMQ 和 RocketMQ 的人是幸运的,因为这两个 MQ 自身提供了延迟队列的实现,不像用 Kafka 的同学那么苦逼,还要自己实现延迟队列.当然,这都是题外话,今天咱们重点来聊聊 ...

  7. Webpack3.x升级至 4.x 小记

    近期项目部署遇到点问题,需要升级webpack版本,特此整理一小记,记录升级过程中的依赖包及报错处理. 本次升级的依赖包及对应版本对照表: npm 包 当前版本 升级版本 S/D vue ^2.5.1 ...

  8. Django+forms+html

    在Django中,Form类通常通过继承django.forms.Form或django.forms.ModelForm来定义.当你定义一个表单类时,通常使用Form或ModelForm类,并使用各种 ...

  9. [oeasy]python0012_程序写错了怎么办

    运行python文件_报错处理_NameError 回忆上次内容 回忆 上次内容 vi oeasy.py 用 vi 编辑 oeasy.py   cat oeasy.py 用 cat 查看 oeasy. ...

  10. [oeasy]python0137_相加运算_python之禅_import_this_显式转化

    变量类型 相加运算 回忆上次内容 上次讲了是从键盘输入变量 input 函数 可以有提示字符串 需要有具体的变量接收输入的字符串   输入单个变量没有问题 但是输入两个变量之后 一相加就非常离谱   ...