为更好理解委托、Lambda表达式、Func, 编写了下面例子。例子中的1——8输出都是相同的,功能也相同。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model
{
    class CaiTest
    {        
        //定义委托. 1,2,3,4,5,6 都要用到
        delegate string delCompare(int a);

        // 1.普通委托
        public void Delegate_test(string[] args)
        {
            delCompare hander = DelegateMethod;
            Console.WriteLine(hander(102));
        }
        public static string DelegateMethod(int a)
        {
            double s=2*a;
            return s.ToString();
        }

        //2. 匿名委托
        public void Delegate_test2(string[] args)
        {
            delCompare del = delegate(int a) { return (2*a).ToString(); };
            Console.WriteLine(del(102));
        }

        //3. lambda表达式:隐式类型=>表达式
        public void lambda_test(string[] args)
        {
            delCompare del = a => (2*a).ToString();
            Console.WriteLine(del(102));
        }

        //4. lambda表达式: 隐式类型=>语句块
        public void lambda_test2(string[] args)
        {
            delCompare del = a => { return (2 * a).ToString(); };
            Console.WriteLine(del(102));
        }

        //5. lambda表达式:显式类型=>表达式
        public void lambda_test3(string[] args)
        {
            delCompare del = (int a) => (2 * a).ToString();
            Console.WriteLine(del(102));
        }

        //6. lambda表达式: 显式类型=>语句块
        public void lambda_test4(string[] args)
        {
            delCompare del = (int a) => { int s = 2 * a; return s.ToString(); };
            Console.WriteLine(del(102));
        }

        //---------------------------
        //7. Func<T1..TResult>,没有用到delegate,相当于直接调用了一个静态方法,理论上比delegate在时间和空间的效率都要高
        public void func_test(string[] args)
        {
            Func<int, string> del = a => (2 * a).ToString();
            Console.WriteLine(del(102));
        }

        //8. Expression(TDelegate),语言级别的,用于动太生成表达式,理论上Expression(TDelegate)效率最差
        public void expression_test(string[] args)
         {
            System.Linq.Expressions.Expression<Func<int, string>> exp = a => (2 * a).ToString(); //生成表达式
            Func<int,string> fun = exp.Compile(); //编译表达式
            fun(102); //执行表达式
        }

    }
}

posted on 2012-10-18 00:12  xjc  阅读(637)  评论(1编辑  收藏  举报