C# 委托与Linq使代码更平滑

        委托(Delegate)

             什么是委托? 委托是一个异步处理的过程.委托是指向一个函数的引用指针.允许把一个函数作为一个变量进行传递.

      一、没有返回值的委托(.NET FCL中包含的Action委托):

             1.   列举委托的一般使用方法:

                委托的声明-->

               public delegate void PrintOutput(string param);       

               委托指向的函数-->

              public static void Print(string param)

     {

                      Console.Write(param);

              }

               Main入口方法的使用委托-->

               PrintOutput printOutput = Print;             //声明了一个委托变量

               printOutput ("打印一个字符串!");

             2.  列举委托的匿名方法的使用方法:

       委托的声明-->

                 public delegate void PrintOutput(string param);       

      //   委托指向的函数-->转化为一个delegate(param)

                PrintOutput printOutput = delegate(string param)

               {

 Console.WriteLine(param);

               };

               printOutput ("打印一个字符串!");

           

             3. 列举委托与Linq,使用linq替代函数与匿名函数使代码更整洁与平滑:

              

委托的声明-->

 

                 public delegate void PrintOutput(string param);       

 

      //   委托指向的函数-->转化为一个Linq的形式

PrintOutput printOutPut = (param) => Console.WriteLine(param);
printOutPut("打印一个字符串!");

 4.   Action委托的使用方法:

      4.1  定义一个带有Action委托参数的函数:

       例如:  

private static void OutputPrint(Action<string> action,string param)
{
  action(param);
}

4.2 入口函数调用:

Action<string> action = (param) => Console.WriteLine(param);
OutputPrint(action, "打印一个字符串!");

二、带返回值的委托(.NET FCL中包含Func委托):

        1.  使用关键字delegate声明委托:

           public delegate string PrintOutputTest(string param);

           //定义委托需要调用的函数

private static string OutputTest(string param)
{
return param;
}

//委托在入口方法中的调用过程

PrintOutputTest printOutPutTest = OutputTest;
Console.WriteLine(printOutPutTest("打印一个字符串!"));

         注意:其他的几种写法,请仿照没有返回值的写法.

   2. Func委托的使用:

 public delegate string PrintOutputTest(string param);

  //定义委托需要调用的函数

 

public static string OutputPrintTest(Func<string,string> action, string param)
{
    return action(param);
}

//委托在入口方法中的调用过程

 

Func<string, string> action = (param) => { return param; };
Console.WriteLine(OutputPrintTest(action, "打印一个字符串!"));

  注意:其他的几种写法,请仿照没有返回值的写法.

 

 

posted @ 2012-04-09 13:38  沙中一粒  阅读(224)  评论(0)    收藏  举报