代码改变世界

c# 链式编程

2009-08-07 14:49 鹤冲天 阅读(...) 评论(...) 编辑 收藏
先写一段代码,让大家了解或重温一下什么是链式编程:
EntityFramwork中的链式编程示例
这一个基本的查询,执行了三个操作:1.查找FristName以C开头的员工;2.取员工的FirstName;3.将名字排序。
EF中只需要一个语句,通过.将三者链成一个语句。后面还可以链接更多的语句,如果需要。
下面代码作一些演化:
链式编程示例2

这段代码定义了Peoson类,有三个操作Run、Swim、Sing,操作完成后返回自身this(有返回值是链式编程的关键)。返回自身this好比说执行完操作先别走人,还(可能)有其它操作要去做,如Example2中:先造一个People,先命令ta跑步,跑完先别休息再唱歌,再游泳,游泳完OK了。
链式编程是将多个操作(多行代码)通过点号"."链接在一起成为一句代码。(定义不严密,表达能力好的请给修正一下)
以下为常规代码与链式代码的比较:
对比
为了增强效果,都执行了两轮操作。个人感觉链式代码更加精炼简洁易读。


链式代码要求操作有返回值,但对于很多操作大都是void型,什么也不返回,这样就很难链起来了。当然也有解决办法,可能不太优雅。
本人使用扩展方法解决这个问题,首先引入一个泛型扩展:
        /// <summary>
        
/// 先执行操作,再返回自身
        
/// </summary>

        public static T Do<T>(this T t, Action<T> action)
        
{
            action(t);
            
return t;
        }
下面是调用示例,其中Student类操作都是void型的。
链式编程示例4
先创建一个学生,先跑再唱再唱,最后把自己名字改一个(哈哈,有点吃饱了撑着的感觉)。
这种使用扩展实现链式编程的方法在我的另一篇文章中使用过,请参考:超精简C#程序代码改进-利用扩展方法简化代码增强可读性,这篇文章是一个探讨极限的文章,由于代码太过于抽象,没得到大家认可。今天写篇文章将 扩展方法 链式编程 单独列出来,欢迎大家讨论。

链式编程的新思想在jQuery中已流行使用,请参见:
jQuery入门[4]-链式代码
jquery教程之链式操作(很容易的制作双色表格)

本人系列文章《c#扩展方法奇思妙用》,敬请关注!