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

下面的例子是给控件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. FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

    ​<FFmpeg开发实战:从零基础到短视频上线>一书的"3.4.3  把原始的H264文件封装为MP4格式"介绍了如何把H.264裸流封装为MP4文件.那么在网络上传输 ...

  2. bs4解析-湖南农场品价格行情

    import requests from bs4 import BeautifulSoup import csv url = 'https://price.21food.cn/market/174-p ...

  3. python 无监督生成模型

    无监督生成模型在机器学习中扮演着重要角色,特别是当我们在没有标签数据的情况下想要生成新的样本或理解数据的内在结构时.一种流行的无监督生成模型是生成对抗网络(Generative Adversarial ...

  4. 都是全志T113处理器,“-i”和“-S3”有什么区别?

    自9个月前,创龙科技"1片含税就79元"的全志T113-i双核ARM Cortex-A7@1.2GHz的工业核心板(SOM-TLT113)推出之后,不少嵌入式软硬件工程师.用户都咨 ...

  5. Python 潮流周刊#59:Polars 1.0 发布了,PyCon US 2024 演讲视频也发布了(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  6. 存储器与CPU的连接

    存储器与CPU连接分主要看前五步 1.首先根据给出的地址范围写出二进制码 2.确定芯片的类型和数量 3.确定地址线 4.确定片选信号 要注意MREQ是低电平有效,要连到138译码器的低电平

  7. oeasy教您玩转vim - 32 - # 函数跳转

    ​ 程序移动 回忆上节课内容 上次内容很简单,主要针对文本类素材 移动段落 {向前 }向后 移动句子 (向前 )向后 如果我想程序中快速移动 怎么办? #首先下载文本找到tomsawyer.txt g ...

  8. 二分专题总结 -ZHAOSANG

    上一周训练了二分专题 可能是我之前自学的时候基础没有打牢,做的时候还是吃力的. 现总结遇到的一些二分题型和思路 二分+模拟(题目最多的) [https://ac.nowcoder.com/acm/co ...

  9. VUE系列之性能优化--懒加载

    一.懒加载的基本概念 懒加载是一种按需加载技术,即在用户需要时才加载相应的资源,而不是在页面初始加载时一次性加载所有资源.这样可以减少页面初始加载的资源量,提高页面加载速度和用户体验. 二.Vue 中 ...

  10. 使用update-alternatives管理GCC版本

    目录 简介 操作过程 简介 当操作系统中存在多个版本的GCC时,可以使用使用update-alternatives管理默认使用的编译器版本. 本文使用gcc-9和gcc-11做演示,操作系统为ubun ...