C# 扩展方法 白话总结
我们在变成的时候时常遇到这样的问题,new了一个系统内的对象之后,我们想要对该对象有一个方法可是却点不出来,说明该对象本身没有声明该方法,可是微软又不允许我们去该对象的代码,怎么办?
在C# 3.0 微软加入了扩展方法,那么扩展方法怎么用呢?
比如我们需要在int里面 生命一个方法,返回的值是int+5,比如:
public static int IntAdd5(int i)
{
return i + 5;
}
用的时候应该是这么用的
static void Main(string[] args)
{
int i = 0;
Console.WriteLine(IntAdd5(i));
}
确实能用,但是不完美,能不能像微软在int类型里声明的方法那样,直接i.IntAdd5()这样来用呢? 用扩展方法可以实现
用扩展方法,首先需要声明一个静态类,然后在这个静态类里面声明一个静态方法,静态方法里面的第一的位置,要this int i ,这样用的
public static class KuoZhan
{
public static int IntAdd5(this int i)
{
return i + 5;
}
}
这里的第一个不是参数,而是你想要扩展的那个类型的名称,换句话说,你想要扩展哪个类型,这里只要扩展哪个类型就行了。
用的话是这么用的。
static void Main(string[] args)
{
int i = 0;
Console.WriteLine(i.IntAdd5());
}
没错,是直接点出来的,很爽有没有??
简单说到这里哦,谢谢!
C# 扩展方法 白话总结的更多相关文章
- 抛弃 .NET 经典错误:object null reference , 使用安全扩展方法? 希望对大家有帮助---Bitter.Frame 引用类型的安全转换
还是一样,我不喜欢长篇大论,除非关乎我设计思想领域的文章.大家过来看,都是想节省时间,能用白话表达的内容,绝不长篇大论.能直接上核心代码的,绝不上混淆代码. 长期从事 .NET 工作的人都知道..NE ...
- .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 ...
随机推荐
- Selenium_Java版本安装及初试
[环境] ①JDK版本:jdk1.8.0_73 ②Eclipse:jee-mars-4.5.2 ③Selenium:selenium-java-3.5.3 ④GoogleChrome:60 ⑤chro ...
- 启动mysql遇到1067问题
最近安装sql的时候,出现一些问题:启动的时候出现1067错误 在网上找了很多方法,比如删除mysql安装目录下date的bdata1, ib_logfile0, .. 等innodb的文件, 比如修 ...
- qt中创建进程
进程:1.QProcess 进程类 QProcess *a=new QProcess(); 2.启动void QProcess::start(const QString & command, ...
- sparksql工程小记
最近做一个oracle项目迁移工作,跟着spark架构师学着做,进行一些方法的总结. 1.首先,创建SparkSession对象(老版本为sparkContext) val session = Spa ...
- mac 上node.js环境的安装与测试
如果大家之前做过web服务器的人都知道,nginx+lua与现在流行的Node.js都是可以做web服务器的,前者在程序的写法和配置上要比后者麻烦,但用起来都是差不多.在这里建议大家如果对lua脚本语 ...
- 在CentOS 7中安装Jetty服务器
Jetty 是一款纯Java的HTTP (Web) 服务器和Java Servlet容器. 通常在更大的网络框架中,Jetty经常用于设备间的通信,而其他Web服务器通常给"人类" ...
- 原生js总结(干货)
1.js基本数据类型 number string boolean underfined null 2.查找文档中的特定元素 document.getElementById("id" ...
- STAThread 和 MTAThread
STAThread:single threaded apartment 直译过来是:单线程单元套间 MTAThread:multiple threaded apartment 直译过来是:多线程单元套 ...
- ASP.NET Core 使用 URL Rewrite 中间件实现 HTTP 重定向到 HTTPS
在传统 ASP.NET 程序中,我们可以通过配置 IIS 的“URL 重写”功能实现将 HTTP 请求重定向为 HTTPS .但是该方法在 ASP.NET Core 应用中不再工作.在 ASP.NET ...
- 各种语系的unicode对应以及local编码方式
链接:http://www.doc88.com/p-801578373970.html 一.英文 Unicode范围: 0041-005A, 0061-007A (若含数字与符号,则为0021-007 ...