《圣殿祭司的ASP.NET4.0专家技术手册》----2-12 扩展方法

本节书摘来自异步社区《圣殿祭司的ASP.NET4.0专家技术手册》一书中的第2章,第12节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区“异步社区”公众号查看。

2-12 扩展方法

圣殿祭司的ASP.NET4.0专家技术手册
扩展方法(Extension Methods)允许针对现有类型加入自定义方法,而不必用传统方式,先继承然后再实现方法,最后还要再进行编译,完全省略了这些不必要的步骤。

然而,什么时候需使用到扩展方法?通常有两个时机:

(1)需扩展类型额外的方法,就可通过扩展方法加入额外的方法;

(2)希望直接使用系统已建立好的扩展方法,这种情况在LINQ中尤其明显。

范例2-12 使用扩展方法扩展string类型方法
假设要将阿拉伯数字“2266”转换为中文“二二六六”,但string类型没有这种转换方法,此时可使用扩展方法,替string类型扩展出额外的方法“ToChineseNum”,然后string类型就可以直接使用这个方法进行转换,请参考ExtensionMethod.aspx程序,具体步骤如下。

程序运行结果如图2-13所示。


e8e9d2e0985de94e635d0ec5467a4cc060fd9179

在App_Code目录下加入ExtendMethods.cs类,在其中定义一个static的ToChineseNum静态方法,用来将阿拉伯数字转换为中文数字:


08146ff4bad2ac55c30216fd399dde49800dadbe

程序说明
以上定义扩展方法和一般类的方法没什么不同,只是有几个特殊的关键点要注意:①必须加入namespace命名空间声明,②扩展方法必须为static静态,③在参数中,类型之前要加入this 修饰词,④参数中的类型表示扩展方法将针对此类型进行扩展。

如果想问为什么要这样定义,祭司只能回答没什么特殊理由,因为它就是微软给的扩展方法规范。

加入扩展方法的命名空间

若.aspx网页程序欲使用上面的扩展方法,必须加入扩展方法的命名空间,例如,在ExtensionMethod.aspx程序中加入:

using ExtensionMethods;
使用扩展方法

扩展方法使用上和一般方法完全相同,请在按钮事件中加入以下程序:


668d57dad48ab0d3466fbbf08c5ddc92ac5f2646

程序说明
在Visual Studio中可看到,凡是声明为string类型的变量,其方法中就自动多了自定义的ToChineseNum()方法,可直接将阿拉伯数字转换为中文数字,这就是扩展方法好用之处,如图2-14所示。


9cd1678fbe39253bc98d5f23c11153a8f7c1fb9c

虽然扩展方法是针对类型来扩展,但WebForm必须using扩展方法命名空间方为有效,否则无效。

另一种情况是系统已预先定义好一堆扩展方法,这在LINQ语法的场合中非常多见,例如,.NET Framework对System.Collections.IEnumerable及System. Collections.Generic. IEnumerable(T)两大类型加入了许如GroupBy、OrderBy、Average等扩展方法,让您直接使用。

范例2-13 使用系统默认的扩展方法
假设有一个int数值数组,其中数值大小顺序是未经过排序的,而刚好系统默认的扩展方法中有一个OrderBy方法可用来进行数字的排序,请参考Order By.aspx程序,步骤如下:

加入using System.Linq声明

using System.Linq;
使用OrderBy扩展方法

以下使用OrderBy扩展方法将数组中int数字进行排序:


8c9aced9d9404f67f606c5c5bb7630bc1eafdab3

程序说明
以上程序重点在于array.OrderBy(g => g),其中g => g是Lambda的语法,第一个g是指来源element的类型,第二个g是指由keySelector返回key的类型,而g是随意命名的,也可以将g改成x,如array.OrderBy(x => x)。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值