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

    xiaoxiao2024-05-07  7

    本节书摘来自异步社区《圣殿祭司的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所示。

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

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

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

    加入扩展方法的命名空间

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

    using ExtensionMethods;使用扩展方法

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

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

    虽然扩展方法是针对类型来扩展,但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数字进行排序:

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

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

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)