zoukankan      html  css  js  c++  java
  • 函数当参数传递有什么用??

    最近和一位同事说下Linq,我提到Linq里很多方法表面来看是把原先不怎么常用的一种技巧正式化了下,就是把函数当参数传递,同事有点不理解,或者这样说,在工作中这有什么用处.

    我这里给出二种简单比较常用的用法.

    1.填充多Execl去重复代码.

    这里想法比较简单,也很容易想到,我有时导出几份Execl时,那么相应的就会有打开Execl,填充Execl,关闭保存Execl这三步.

    但是这几份Execl里,打开Execl,关闭保存Execl是相同的.我们代码工人都知道不要写重复代码.那么好,封装吧.........

    但是关键是填充Execl这步不一样,怎么做(不要告诉我用设计模式来封装多种模式,然后用不同模式来填充啊.)很简单,

    因为填充Execl不一样,也就是说,要填充的Execl表格Worksheet不一样,在这里就可以把函数当参数传递.如下.

    public string OnAction(params Action<Worksheet>[] actions)

    {

          //打开Execl

        for(int i = 0;i < actions.Length;i++) 

      { 

        wsheet = myExecl.Worksheets.getItem(i+1);

        //在这里填充相应的Execl表格Worksheet,至于怎么填充的,就看你相对应的action[i]方法的实现了.

        action[i](wsheet);

      }

      //关闭保存Execl

    }

    2.ASP.NET 写的 泛型委托在项目中的应用.

    这里给我们展示了一种场景.

    具体场景:在客户端调用WCF服务时,我们都需要在客户做异常处理,最常见的错误异常为CommunicationException,TimeoutException,Exception.

    通常我们只能执行这个方法,然后捕获异常.一个二个方法没什么.如果到达10个会怎么样,还不说100的时候.你的项目里就全是那些一模一样的Try{}Catch{}.

    幸好,作者给了我们一种处理方法.

    把方法作为一个对象来考虑,我只考虑方法执行的异常情况,你怎么处理我不管.如下.

    public static void Invoke<TContract>(TContract proxy, Action<TContract> action)
    {

      try{

        action(proxy));

      }

         catch()

      {

      }

      catch()

      {

      }

    }

    这样整个世界清静了.

    PS:说实话,理论上的讲解很麻烦,我只有更多从实例来说.有理解错误的地方,大家请指出.谢谢.

  • 相关阅读:
    学生管理系统代写
    学生竞赛评价系统
    《划时代51单片机C语言全新教程》前言
    《划时代51单片机C语言全新教程》第三章 开发环境 概览
    校验和
    NBOOT分析-S3C244xInit.s(1)
    《划时代51单片机C语言全新教程》第一章 8051简介 概览
    《划时代51单片机C语言全新教程》第二章 STC89C52RC 处理器 概览
    ARM9中断调试(1)
    NBOOT分析-NBOOT.c(2)
  • 原文地址:https://www.cnblogs.com/zhouxin/p/1722844.html
Copyright © 2011-2022 走看看