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

下面的例子是给控件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. 【译】Visual Studio 2022 - 17.10 性能增强

    我们很高兴地宣布 Visual Studio 2022 的最新更新,它为您带来了 IDE 各个领域的一系列性能增强.在这篇博客中,我们将重点介绍17.10版本中一些最显著的改进,比如更快的 Windo ...

  2. VulnHub_DC-5渗透流程

    DC-5 主机探测 nmap 192.168.157.0/24 访问网站 探测网站得知是Nginx 目录扫描 在Contact处可以提交东西,抓个包,发现在thankyou.php界面时间年份会变,应 ...

  3. 使用FastReport报表动态更新人员签名图片

    在一些报表模块中,需要我们根据用户操作的名称,来动态根据人员姓名,更新报表的签名图片,也就是电子手写签名效果,本篇随笔介绍一下使用FastReport报表动态更新人员签名图片. 1.设计FastRep ...

  4. 【算法】在vue3的ts代码中分组group聚合源数据列表

    有一个IList<any>()对象列表, 示例数据为[{id:'1',fieldName:'field1',value:'1'},{id:'1',fieldName:'field2',va ...

  5. Vue禁止用户复制文案 + 兼容 IE

    vue必须要加载完才可以操作dom,或者在mounted和created时使用this.$nextTick方法,使dom生成后进行相关操作. created() { this.$nextTick(() ...

  6. vscode 调试 nodejs 程序

    nodejs 服务在vscode 中的调试 1.安装vscode 略(这不用说了吧) 2.写一个能跑的nodejs 程序 其实看到这个,自己已经有一个能跑的nodejs 程序,不用看我的了 我这里是我 ...

  7. 网络基础 CAS协议学习总结

    架构介绍 系统组件 CAS服务器和客户端构成了CAS系统体系结构的两个物理组件,它们通过各种协议进行通信. CAS服务器 CAS服务器是基于Spring Framework构建的Java servle ...

  8. DP进阶合集

    (ps:本集合为Star_F总结的dp进阶知识,持续更新~. 转载本文章需要联系我,否则视为侵权!!) 前置知识:线性dp,背包,树形dp,区间dp 内容预览: 状压dp 数位dp dp优化(前缀和, ...

  9. SSL/TLS 深入浅出

    SSL,https(HTTP over SSL), X.509, SSL 证书 ,证书申请 /导入/签发, 等名词,想必有一定工作经验的小伙伴,一定都会略有耳闻,或者至少也听神边大神念叨过.虽然司空见 ...

  10. Jmeter边界提取器

    组件路径:HTTP请求->右键添加->后置处理器->边界提取器 用途:边界提取器(Boundary Extractor)是放在Sample请求之后执行的,用于获取左右边界中间的所有字 ...