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

下面的例子是给控件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. sql-labs通关笔记(上)

    sql-labs通关笔记(上) 这里我们先只讲解less-1到less-9 联合查询注入 Less-1:GET -Error based.Single quotes -string 界面 在url中加 ...

  2. 缩小50%,Mini版T3/A40i核心板,让您的设备更小巧!

    小尺寸核心板给用户带来何种价值? 创龙科技常收到用户对于小尺寸核心板的需求反馈,尤其在电力数据采集器.电力DTU.电力通讯管理机.运动控制器.工业HMI.工业网关等工业设备中. 小尺寸核心板3大优势将 ...

  3. Apifox 6月更新|定时任务、内网自部署服务器运行接口定时导入、数据库 SSH 隧道连接

    Apifox 新版本上线啦!!! 看看本次版本更新主要涵盖的重点内容,有没有你所关注的功能特性: 自动化测试支持设置「定时任务」  支持内网自部署服务器运行「定时导入」 数据库均支持通过 SSH 隧道 ...

  4. Spring注解之生命周期@PostConstruct和@PreDestroy

    ****### 简介 从Java EE5规范开始,Servlet增加了两个影响Servlet生命周期的注解(Annotation):@PostConstruct和@PreConstruct. 这两个注 ...

  5. Python爬虫(1-4)-基本概念、六个读取方法、下载(源代码、图片、视频 )、user-agent反爬

    Python爬虫 一.爬虫相关概念介绍 1.什么是互联网爬虫 如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小蜘蛛,沿着蜘蛛网抓取自己想要的数据 解 ...

  6. CF1988C Increasing Sequence with Fixed OR Solution

    题意简述如下: 给定一个正整数 \(n\),请构造一个正整数序列使其满足以下条件并尽可能长:这个序列中每个数都大于等于 \(1\) 且小于等于\(n\):这个序列是单调递增的:这个序列中任意两个相邻的 ...

  7. Redis内存回收与缓存问题

    内存回收: 1.过期key处理 通过expire命令给key设置ttl Redis本身是KV型数据库,所有数据都存在RedisDB结构体中,其中有两张哈希表 dict:用于存放KV(这里K是K,V是V ...

  8. Jmeter函数助手41-unescapeHtml

    unescapeHtml函数用于将HTML转义过的字符串反转义为Unicode字符串. String to unescape:填入字符 1.escapeHtml函数是将字符进行HTML转义,unesc ...

  9. Jmeter参数化5-JSON提取器

    后置处理器[JSON提取器] ,一般放于请求接口下面,用于获取接口返回数据里面的json参数值 1.以下json为例,接口返回的json结果有多组数据.我们要取出purOrderNo值 2.在jmet ...

  10. 买二手NVIDIA网卡被坑记录:某宝的咸鱼二手交易网站上购入NVIDIA Mellanox ConnectX-3 网卡 居然不支持Windows 11操作系统 —— 老二手40Gbps的NVIDIA网卡已经不被新操作系统支持

    原本是打算去大连的人工智能计算中心去做技术负责人的,不过考虑到工作性质再考虑到自己的一些现实情况也就放弃了这个职位(比较在大连理工大学的博士学位还没有读下来,还是有所牵挂的).同时,由于自己已经退出了 ...