C#扩展方法的理解.docx_第1页
C#扩展方法的理解.docx_第2页
C#扩展方法的理解.docx_第3页
C#扩展方法的理解.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#扩展方法的理解“扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。”这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码。先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能。以往我们可能是这样做的,会专门写一个方法做过转换publicstaticintStrToInt(strings)intid;int.TryParse(s, outid);/这里当转换失败时返回的id为0returnid;调用就使用strings = abc;inti = StrToInt(s);若是String类型有一个名为ToInt()(从字符串转为数值)的方法,就可以这样调用了strings = abc;inti = s.ToInt();这样看起来是不是更好,下面来看看具体怎么实现吧第一步:我先创建一个解决方案,一个web应用程序(webtest)及一个类库(W.Common)在webtest项目添加引用W.Common项目第二步:在类库中新建一个名为EString.cs类usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceW.CommonpublicstaticclassEString/ / 将字符串转换为Int/ / / 当转换失败时返回0publicstaticintToInt(thisstringt)intid;int.TryParse(t, outid);/这里当转换失败时返回的id为0returnid;看了上面的代码了吧,扩展方法规定类必须是一个静态类,EString是一个静态类,里面包含的所有方法都必须是静态方法。msdn是这样规定扩展方法的:“扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。”EString里有一个ToInt的静态方法,他接收一个自身参数this,类型为string,this string必须在方法参数的第一个位置。这句话什么意思,即你需要对string扩展一个ToInt方法,this是string实例化后的对象,这可能说的不太清楚,我的表述能力能弱,不要见怪呀。通俗的说就是,扩展方法跟静态类的名称无关,只需要在一个静态类里面定义一个静态方法,第一个参数必须this string开头。如果需要你要对DateTime类型扩展方法名为IsRange(判断是否在此时间范围内),代码如下:/ / 此时间是否在此范围内 -1:小于开始时间 0:在开始与结束时间范围内 1:已超出结束时间/ / / / / publicstaticintIsRange(thisDateTime t, DateTime startTime, DateTime endTime)if(startTime - t).TotalSeconds 0)return-1;if(endTime - t).TotalSeconds 0)return1;return0;这里的扩展方法是用this DateTime打头,那么就可以这样调用time.IsRange(t1,t2);/判断时间time是否在t1到t2的范围内当前代码在使用扩展方法前需要先引用命名空间usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingW.Common;/这里引用扩展方法所在的命名空间namespacewebtestpublicpartialclass_Default : System.Web.UI.PageprotectedvoidPage_Load(objectsender, EventArgs e)use1();Response.Write();use2();/ / 没有用扩展方法/ privatevoiduse1()strings = abc;inti = StrToInt(s);Response.Write(没有用扩展方法:+ i);/ / 使用扩展方法/ privatevoiduse2()strings = 2012;inti = s.ToInt();Response.Write(使用扩展方法:+ i);publicstaticintStrToInt(strings)intid;int.TryParse(s, outid);/这里当转换失败时返回的id为0ret

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论