C#扩展方法实现
C#提供了一种机制,可以扩展系统或者第三方类库中的方法。比如说想在string类型的对象里面多一个ToInt32(),来方便的将字符转换成整形。在实现的过程中的关键字为static和this即可。
下面我们来做一个在string类型中新建一个ToInt32的自定义方法:
public static class Extension//必须先声明一个静态类,类名随意
{
public static int ToInt32(this string In)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型为需要扩展的类型
{
return Convert.ToInt32(In);
}
}
那么在使用string的对象的时候,会多出一个ToInt32的方法。
static void Main(string[] args)
{
string a = "1";
int b = a.ToInt32();
Console.ReadLine();
}
既然可以扩展.net的内置类型,扩展自定义类型也是可以的。
public class A//先定义A类
{
}public static class Extension//必须先声明一个静态类,类名随意
{
public static int ToInt32(this string In)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型
{
return Convert.ToInt32(In);
}
//为A新增一个ExtensionMethod方法
public static string ExtensionMethod(this A a)//扩建的方法必须是静态方法,参数里面必须含有this关键字,this关键字后面的类型
{
return "this is extension method";
}
}
在使用A的对象的时候,会多出一个ExtensionMethod方法:
static void Main(string[] args)
{
string a = "1";
int b = a.ToInt32();
A c = new A();
string d = c.ExtensionMethod();
Console.ReadLine();
}
C#扩展方法实现的更多相关文章
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
.NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...
- 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇
最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...
- C#的扩展方法解析
在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到. 继承的有关特性的使用所带来的问题:对象的继 ...
- 扩展方法(C#)
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 下面的示例为String添加 ...
- 扩展方法解决LinqToSql Contains超过2100行报错问题
1.扩展方法 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- C#扩展方法
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法就相当于一个马甲,给一个现有类套上,就可以为这个类添加其他方法了. 马甲必须定义为stati ...
- 枚举扩展方法获取枚举Description
枚举扩展方法 /// <summary> /// 扩展方法,获得枚举的Description /// </summary> /// <param name="v ...
- 扩展方法 1 简单的string扩展方法
这里是关于 String的简单扩展方法 (静态类 静态方法 this 类型 这里是string) static class Program { static void Main(string[] ar ...
- C#中的扩展方法
扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 以上是msdn官网对扩展方 ...
随机推荐
- P1036 选数 题解
题目链接https://www.luogu.org/problemnew/show/P1036 题目描述 已知 nnn 个整数 x1,x2,-,xnx_1,x_2,-,x_nx1,x2,-,xn ...
- mysql 检查一个字符串是不是身份证号
)CHARSET utf8) ) BEGIN DECLARE flag BOOL DEFAULT FALSE; AND number REGEXP CONCAT('^(([1][1-5])|([2][ ...
- jdk1.8学习、jdk1.9学习、jdk10.0学习和总结
由于中文参考资料很少,参考链接: https://www.oschina.net/translate/109-new-features-in-jdk-10 http://chuansong.me/n/ ...
- Processing3 1.随机行走
class Walker { int x; int y; Walker() { x = width/2; y = height/2; } void display() { stroke(0); poi ...
- 【Android】Android 代码判断当前设备是否为模拟器
[Android]Android 代码判断当前设备是否为模拟器 方法比较简单,直接粘贴代码 //判断当前设备是否是模拟器.如果返回TRUE,则当前是模拟器,不是返回FALSE public stati ...
- Python学习(十三) —— 网络编程
一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...
- js压缩图片上传插件localResizeIMG
示例 /** * 本地图片压缩后上传 */ $("#vfile").change(function(){ var _this = $(this); lrz(this.files[0 ...
- Python 扫盲
yield使用浅析 菜鸟教程:http://www.runoob.com/w3cnote/python-yield-used-analysis.html #!/usr/bin/python # -*- ...
- day32 process模块用法
昨日作业: 服务端: 服务端: from socket import * from multiprocessing import Process def server(ip,port): server ...
- POJ 1236 Network Of Schools 【Targan】+【缩点】
<题目链接> 题目大意: 有N个学校,每个学校之间单向可以发送软件,现在给你一些学校之间的收发关系.问你下面两个问题:至少要给多少个学校发送软件才能使得最终所有学校都收到软件:至少要多加多 ...