四、为我们的爱加上更为自由的翅膀--扩展方法
熟知Web编程的朋友们应该对如下这段代码很熟悉:
其中ReplaceUnSafeChars是一个进行字符器过滤的函数,将传入的字符串中的非法字符过滤,返回一合法的字符串,它通常用于用户向某一数据处理页面提交数据时,为了防止SQL注入或者其他非法入侵而进行的一项工作。为此我们不厌其烦地写类库,在某一项目的解决方案中添加进来自己过滤函数。这种方式是不错,可是,能不能有一种方式让我们更为方便,让我们写出的代码更为优雅?
设想,如果我们能够对系统中定义的数据类型进行扩展,给它增加上我们自己的方法,那岂不是我们可以像strID.ToSring()那样来实现我们自己的过滤方法?
不错,想法有了,自然C#也不会让我们失望--扩展方法(Extension Methods)为我们来解决这一问题。如下图我们定义一个类:

注意,该类为静态类,并且其中的方法Name为静态方法,其参数o为object类型,并且有关键字this进行修饰。以上这些,就是为系统类型进行扩展时的必备条件。在定义了该类的同一命名空间下的其他类中即可对所有类型使用该Name方法来获取它的ToString()之后的值。我们看编译器是如何来表示的:
我们看到,编译器强大的智能提示功能给我们的提示是(extension) string object.Name(),这是因为我们是对object类进行了扩展,故我们可以对任何类型使用扩展方法Name。
这虽然并不是一个十分大的改动,可是对于我们在代码上的可读性及实用性都会有很大的帮助。我们习惯了从左到右的阅读方式,习惯了在打"."时编译器给出智能提示,所以我们也会毫无理由的习惯"扩展方法"。
要注意,对于值类型的变量进行扩展是MS推荐的,可是对于引用类型的变量进行扩展却并未被推荐,因为对于所有的调用都要创建一个对象的拷贝,而这个对象拷贝的创建的花销是我们所不敢随意忽略的。
进入讨论组讨论。相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- 数据结构(C#)_排序算法(冒泡排序) (44次浏览)
- C#基础概念二十五问 (34次浏览)
- C#多线程学习—生产者和消费者 (33次浏览)
- 在C#.net中操作XML实例 (28次浏览)
- 截取字符串方法总结 (24次浏览)
- C#WIN窗体读取EXCEL存入SQL数据库 (24次浏览)
- C#与数据结构 (24次浏览)
- C#创建简单的验证码 (22次浏览)
- C#正则表达式整理备忘 (21次浏览)
- 用C#生成不重复的随机数 (21次浏览)




