Lambda与委托的羁绊~~~

废话不多说,上代码

namespace MyLamdba
{
    class Program
    {
        static void Main(string[] args)
        {
            LamDbaShow.Show();
            Console.ReadKey();
        }
    }
}

 

namespace MyLamdba
{
    public delegate void OutNoResultNoPara(); //无返回值
    public delegate void OutNoResultWithPara(string name, DateTime now); //
    public delegate int WithResultWithPara(int x, int y);
    public delegate string NoParaWithResult();
    public class LamDbaShow
    {
        public static void Show()
        {
            //匿名函数,这里的省略了把方法名传过来,直接把传参的拿过来了,把方法名去掉了
            OutNoResultWithPara method1 = new OutNoResultWithPara(delegate(string name, DateTime now)
            {
                Console.WriteLine("我是{0},现在{1}点了", name, now);
            });
            method1.Invoke("aaaa", DateTime.Now);
            //==^我是漂亮的分割线……^=^
            OutNoResultWithPara method2 = new OutNoResultWithPara(
                (string name, DateTime now) => //把delegate 关键字换成了=> 箭头的左边是参数列表,右边是方法体
                {
                    Console.WriteLine("我是{0},现在{1}点了", name, now);
                });
            method2.Invoke("aaaa", DateTime.Now);
            //lamdba表达式其实就是一个匿名方法
      /=^=^^=^^=^^=^我是漂亮的分割线……
            OutNoResultWithPara method3 = new OutNoResultWithPara(
                (name, now) => //把delegate 关键字换成了=> 箭头的左边是参数列表,右边是方法体
                {
                    Console.WriteLine("我是{0},现在{1}点了", name, now);
                }); //去掉了参数类型,因为在进行委托的时候,约束了传入参数的类型
            method3.Invoke("aaaa", DateTime.Now);
            //=^=^我是漂亮的分割线……^=^^=^^=^^=^=
            OutNoResultWithPara method4 = ((name, now) =>
            {
                Console.WriteLine("我是{0},现在{1}点了", name, now);
            }); //去掉了实例化委托,直接传参
            method3.Invoke("aaaa", DateTime.Now);
            //=^=^^=^^=^^=^我是漂亮的分割线…
            OutNoResultWithPara method = (s, d) => Console.WriteLine("我是{0},现在{1}点了", s, d);
            //去掉了大括号,前提是方法体只有一行
            method.Invoke("猪猪猪", DateTime.Now);
            //==^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^==
            OutNoResultNoPara met = () => Console.WriteLine("132123"); //不传入参数的
            met.Invoke();
            //^我是漂亮的分割线……
            WithResultWithPara WW = (x, y) =>
            {     return x + y; };
            Console.WriteLine(WW.Invoke(1, 2));
            WithResultWithPara WS = (x, y) => x + y;
            Console.WriteLine(WS.Invoke(1, 2)); //去掉了大括号,带返回值的直接去掉return 前提是方法体只有一行,
            //==^=^^=^^=^^=^我是漂亮的分割线……^=^^=^^=^^=^=
            OutNoResultNoPara sss = () => {}; //无参数无返回值,啥都没干
            NoParaWithResult aa = () => "我是无参数有返回值";
            Console.WriteLine(aa());
        }
        public static void Study(string name, DateTime now)
        {
            Console.WriteLine("我是{0},现在{1}点了", name, now);
        }
    }
}
posted @ 2017-10-08 18:28  ProZkb  阅读(553)  评论(0编辑  收藏  举报