频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

把我的爱送给你――C#3.5新特性介绍

来源:本站原创 作者:韩现龙 出处:巧巧读书 2008-05-08 进入讨论组

    四、为我们的爱加上更为自由的翅膀--扩展方法

    熟知Web编程的朋友们应该对如下这段代码很熟悉:

把我的爱送给你――C#3.5新特性介绍(图五)

    
    其中ReplaceUnSafeChars是一个进行字符器过滤的函数,将传入的字符串中的非法字符过滤,返回一合法的字符串,它通常用于用户向某一数据处理页面提交数据时,为了防止SQL注入或者其他非法入侵而进行的一项工作。为此我们不厌其烦地写类库,在某一项目的解决方案中添加进来自己过滤函数。这种方式是不错,可是,能不能有一种方式让我们更为方便,让我们写出的代码更为优雅?

    设想,如果我们能够对系统中定义的数据类型进行扩展,给它增加上我们自己的方法,那岂不是我们可以像strID.ToSring()那样来实现我们自己的过滤方法?

    不错,想法有了,自然C#也不会让我们失望--扩展方法(Extension Methods)为我们来解决这一问题。如下图我们定义一个类:

把我的爱送给你――C#3.5新特性介绍(图六)


    
    注意,该类为静态类,并且其中的方法Name为静态方法,其参数o为object类型,并且有关键字this进行修饰。以上这些,就是为系统类型进行扩展时的必备条件。在定义了该类的同一命名空间下的其他类中即可对所有类型使用该Name方法来获取它的ToString()之后的值。我们看编译器是如何来表示的:
    
   

把我的爱送给你――C#3.5新特性介绍(图七)


    
    我们看到,编译器强大的智能提示功能给我们的提示是(extension) string object.Name(),这是因为我们是对object类进行了扩展,故我们可以对任何类型使用扩展方法Name。

    这虽然并不是一个十分大的改动,可是对于我们在代码上的可读性及实用性都会有很大的帮助。我们习惯了从左到右的阅读方式,习惯了在打"."时编译器给出智能提示,所以我们也会毫无理由的习惯"扩展方法"。

    要注意,对于值类型的变量进行扩展是MS推荐的,可是对于引用类型的变量进行扩展却并未被推荐,因为对于所有的调用都要创建一个对象的拷贝,而这个对象拷贝的创建的花销是我们所不敢随意忽略的。

进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章