zoukankan      html  css  js  c++  java
  • c# 链式编程

    先写一段代码,让大家了解或重温一下什么是链式编程:
    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#扩展方法奇思妙用》,敬请关注!

    -------------------

    思想火花,照亮世界

  • 相关阅读:
    【开发记录】TSINGSEE青犀视频平台开发Visual Studio 2017自建WebRTC中peerconnection_client程序报错无法解析的外部符号
    【开发记录】网络穿透/端口映射EasyNTS视频网关设备支持H265编码视频流和aac音频流的拉转推功能
    【开发记录】EasyRTC企业远程视频通话系统基于WebRTC编译mediasoupclient库报错没有生成”object”文件解决方法
    端口映射/网络穿透设备EasyNTS上云网关如何配置拉流转推到EasyDSS视频直播点播平台?
    【操作说明】新版网络穿透+视频拉转推EasyNTS上云网关管理平台如何进行远程设备管理?
    【BUG修复】TSINGSEE青犀视频云边端智能分析平台EasyNVR/EasyDSS/EasyGBS在chrome登陆无法获取用户信息
    【开发记录】网络穿透/端口映射/动态组网/视频推流EasyNTS上云网关平台tab栏折叠功能开发
    【产品升级】网络穿透/远程运维/动态组网EasyNTS上云网关新增RTMP视频推流上云功能
    【操作说明】新版网络穿透/端口映射/视频拉转推EasyNTS上云网关管理平台如何远程接入EasyNTS上云网关?
    TSINGSEE青犀视频云边端架构视频智能分析平台低延迟直播可以用webrtc实现吗?
  • 原文地址:https://www.cnblogs.com/ldp615/p/1541189.html
Copyright © 2011-2022 走看看