C#给类的添加扩展方法
今天学习了给类添加扩展方法,这里记录下。我这记性不好,过不了两天就给忘记了。
下面的例子是给控件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#给类的添加扩展方法的更多相关文章
- ..net 3.5新特性之用this关键字为类添加扩展方法
具体用法如下: public static class ClassHelper { //用this 声明将要吧这个方法附加到Student对象 public static bool CheckName ...
- 为system对象添加扩展方法
////扩展方法类:必须为非嵌套,非泛型的静态类 public static class DatetimeEx { //通过this声明扩展的类,这里给DateTime类扩展一个Show方法,只有一个 ...
- LINQ学习笔记——(1)添加扩展方法
目的: 对已存在类型的行为进行扩展 注意事项: 扩展方法是一种特殊的静态方法 扩展方法必须在静态类中定义 扩展方法的优先级低于同名的类方法 扩展方法只在特定的命名空间内有效 ...
- WebAPi添加常用扩展方法及思维发散
前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...
- C#中this在扩展方法的应用
给类添加扩展方法 1.定义一个类Service public class Service { private string _name; public string Name { get { retu ...
- C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)
C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
- JavaScript学习总结(十四)——JavaScript编写类的扩展方法
在JavaScript中可以使用类的prototype属性来扩展类的属性和方法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...
- Groovy中如何向已有的类添加新方法
Groovy 中有多种途径实现向原有类添加方法,具体有如下几种: MOP(meta object protocol) -- 详见 ExpandoMetaClass 扩展方法 -- GDK采用的此方法 ...
- php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
1.认识 __set (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...
- 给 string 添加一个 GetInputStream 扩展方法
有时候,我们须要读取一些数据,而无论这数据来源于磁盘上的数据文件,还是来源于网络上的数据.于是.就有了以下的 StringExtensions.cs: using System; using Syst ...
随机推荐
- 小米节假日API, 查询调休
小米的节假日API, 用于查询一年中的第X天是否正在放假或是在调休. 在浏览器中打开保存下来, 一年只需要调用一次即可. https://api.comm.miui.com/holiday/holid ...
- Linux OpenGrok搭建
目录 一.目的 二.环境 三.相关概念 3.1 OpenGrok 3.2 CTags 3.3 Tomcat 四.OpenGrok搭建 4.1 安装jdk 4.2 安装ctags依赖 4.3 安装uni ...
- Linux系统用户组管理
用户管理 和Windows一样在Linux中也存在许多用户,可以登陆Linux,和Windows不同的是,在Windows中同一时刻只可以存在一个用户登录系统,而在Linux中是允许多个用户同时登 ...
- HDFS的特点和目标,不适合场景
HDFS的特点和目标: HDFS设计优点: (一)高可靠性:Hadoop按位存储和处理数据的能力值得人们信赖; (二)高扩展性:Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可 ...
- 一文搞懂到底什么是 AQS
前言 日常开发中,我们经常使用锁或者其他同步器来控制并发,那么它们的基础框架是什么呢?如何实现的同步功能呢?本文将详细讲解构建锁和同步器的基础框架--AQS,并根据源码分析其原理. 一.什么是 AQS ...
- wireshark查看https通讯
前言 https在原有的http基础上增加了了一个TLS/SSL层,https的通讯过程是加密的,如果想用wireshark仔细分析TLS/SSL层,需要借助服务器证书公私钥或者用浏览器截取密钥: 接 ...
- new操作符具体干了什么呢?
new操作符的作用如下: 1.创建一个空对象2.由this变量引用该对象3.该对象继承该函数的原型4.把属性和方法加入到this引用的对象中5.新创建的对象由this引用,最后隐式地返回this.过程 ...
- PO、VO、BO、DTO、POJO、DAO、DO
DO: domain object持久对象就是从现实世界中抽象出来的有形或无形的业务实体. PO:persistant object持久对象最形象的理解就是一个PO就是数据库中的一条记录.好处是可以把 ...
- 新版SpringBoot-Spring-Mybatis 数据库相关配置
application.properties server.port=8081 # ========================数据库相关配置===================== sprin ...
- 在MoneyPrinterPlus中使用本地chatTTS语音模型
之前MoneyPrinterPlus在批量混剪,一键AI生成视频这些功能上的语音合成功能都用的是云厂商的语音服务,比阿里云,腾讯云和微软云. 云厂商虽然提供了优质的语音服务,但是用起来还是要收费. 为 ...