[转]C#的扩展方法解说
C#的扩展方法解说
扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型。
为数据类型的添加一个方法的理解:一般来说,int数据类型有个Tostring的方法,就是把int 数据转换为字符串的类型,比如现在我们想在转换成字符串的时候还添加一点东西,比如增加一个字符 a .那么之前的Tostring就不好使了,因为它只是它我们的int数据转换为string类型的,却并不能添加一个字母 a.所以这就要用到所谓的扩展方法了。
首先我们看一个给现有的类型增加一个扩展方法。
我们想给string 类型增加一个Add方法,该方法的作用是给字符串增加一个字母a.

- //必须是静态类才可以添加扩展方法
- Static class Program
- {
- static void Main(string[] args)
- {
- string str = "quzijing";
- //注意调用扩展方法,必须用对象来调用
- string Newstr = str.Add();
- Console.WriteLine(Newstr);
- Console.ReadKey();
- }
- //声明扩展方法
- //扩展方法必须是静态的,Add有三个参数
- //this 必须有,string表示我要扩展的类型,stringName表示对象名
- //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,//再增加一个变量即可
- public static string Add(this string stringName)
- {
- return stringName+"a";
- }
- }

我们再来尝试给我们自定义的类型增加一个扩展方法,并增加一个传递的参数。
首先我们声明一个Student类,它包含了两个方法StuInfo,getStuInfo.实例代码如下:

- public class Student
- {
- public string StuInfo()
- {
- return "学生基本信息";
- }
- public string getStuInfo(string stuName, string stuNum)
- {
- return string.Format("学生信息:\n" + "姓名:{0} \n" + "学号:{1}", stuName, stuNum);
- }
- }

之后我们再声明一个名为ExtensionStudentInfo的静态类,注意必须为静态
这个类的作用就是包含一些我们想要扩展的方法,在此我们声明两个Student类型的扩展方法,Student类型为我们自定义的类型。示例代码如下:

- public static class ExtensionStudentInfo
- {
- //声明扩展方法
- //要扩展的方法必须是静态的方法,Add有三个参数
- //this 必须有,string表示我要扩展的类型,stringName表示对象名
- //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,再增加一个变量即可
- public static string ExtensionStuInfo(this Student stuName)
- {
- return stuName.StuInfo();
- }
- //声明扩展方法
- //要扩展的方法必须是静态的方法,Add有三个参数
- //this 必须有,string表示我要扩展的类型,stringName表示对象名
- //三个参数this和扩展的类型必不可少,对象名可以自己随意取如果需要传递参数,在此我们增加了两个string类型的参数
- public static string ExtensionGetStuInfo(this Student student, string stuname, string stunum)
- {
- return student.getStuInfo(stuname, stunum)+"\n读取完毕";
- }
- }

以上的工作做完之后便可以使用我们的扩展方法了,注意必须要用对象来调用扩展方法。

- static void Main(string[] args)
- {
- Student newstudent = new Student();
- //要使用对象调用我们的扩展方法
- string stuinfo = newstudent.ExtensionStuInfo();
- Console.WriteLine(stuinfo);
- //要使用对象调用我们的扩展方法
- string stuinformation = newstudent.ExtensionGetStuInfo("quzijing", "20081766");
- Console.WriteLine(stuinformation);
- Console.ReadKey();
- }

[转]C#的扩展方法解说的更多相关文章
- C#的扩展方法解说
扩展方法的目的就是为一个现有类型添加一个方法,现有类型既可以是int,string等数据类型,也可以是自定义的数据类型. 为数据类型的添加一个方法的理解:一般来说,int数据类型有个Tostring的 ...
- 【开源】OSharp框架解说系列(3):扩展方法
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- LinQ—扩展方法
概述 本节主要解说扩展方法,涉及LinQ的详细知识不多. 扩展方法的描写叙述 .net framework为编程人员提供了非常多的类,非常多的方法,可是,不论.net framework在类中为我们提 ...
- .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 ...
随机推荐
- HDU5669
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:传送门 Portal 原题目描述在最下面. 给你n个点 ...
- Xcode输出中文
重写NSArray和NSDictionary分类Category就OK了! 导入头文件 #import <objc/runtime.h> + (void)load { static dis ...
- 转: div:给div加滚动条 div的滚动条设置
div 的滚动条问题: 两种方法: 一. <div style=" overflow:scroll; width:400px; height:400px;”></div&g ...
- 如何优雅的使用Objects.requireNonNull(T obj, String message)定制你的NPE异常
IDEA中习惯跟踪源码实现逻辑,多次碰到Objects.requireNonNull(T obj)这个方法,改方法主要用于提早判断对象是否为空,以便更早的抛出NPE 平时小组开发中强调程序健壮性,不允 ...
- varnish(转http://www.ttlsa.com/nginx/varnish-4-configure-file/)
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ...
- IntelliJ IDEA创建springboot项目
1.创建新项目. 2. 3.Group 是包名,Artifact是项目名. 4.springboot版本尽量选择最高版本,且不要选择SNAPSHOP版本. 5.路径可自定义,默认为D://IDEA/M ...
- Southern African 2001 Stockbroker Grapevine /// Floyd oj1345
题目大意: 输入n 接下来n行 每行输入m 接下来m对a,b 若干个人之间会传播谣言,但每个人传播给其他人的速度都不一样, 问最快的传播路线(即耗时最短的)中最耗时的一个传播环节. 如果其中有人不在这 ...
- javascript字符串方法学习汇总
1.charAt(index) charAt(index):返回字符串中指定位置的字符 var str = 'abcdefghi'; console.log(str.charAt()); // 输出 ...
- SolrCloud6.1.0之SQL查询测试
Solr发展飞快,现在最新的版本已经6.1.0了,下面来回顾下Solr6.x之后的一些新的特点: (1)并行SQL特性支持,编译成Streaming 表达式,可以在solrcloud集群中,并行执行 ...
- hive sparksession查询只显示defalt库问题
1.spark环境记得拷贝进hive.xml 2.SparkSession.builder().enableHiveSupport()记得加上enableHiveSupport 3.window记得w ...