[我眼中的C#]委托和Lambda表达式

来源:互联网 发布:知乎双肩包推荐 编辑:程序博客网 时间:2024/05/21 19:21

委托是 C#用来传递方法的引用的语法,和类相同,委托调用之前也要经过定义和声明的过程

private delegate string GetString();        static void Main(string[] args)        {            ////委托是一个类型,这个类型可以赋值一个方法的引用            ////ToString()是object类型的方法            //int x = 40;            ////GetString a=new GetString(x.ToString);//没有括号,说明没有调用这个方法,只是传递一个引用                //GetString a = x.ToString;            ////string s = a();            //string s = a.Invoke();            //Console.WriteLine(s);//通过委托类型调用一个方法,跟直接调用一个方法是一样的            //使用委托类型作为方法的参数            PrintString method = Method1;            PrintStr(method);            method = Method2;            PrintStr(method);            Console.ReadKey();        }        private delegate void PrintString();        static void PrintStr(PrintString print)        {            print();        }        static void Method1()        {            Console.WriteLine("Method1");        }        static void Method2()        {            Console.WriteLine("Method2");        }

使用委托可以先创建匿名方法,但是C#提供了更为简单的方法—Lambda表达式

//Lambda表达式用来代替一个匿名方法,所以一个lambda也是定义了一个方法            Func<int, int, int> plusFunc = (arg1, arg2) =>//lambda表达式的参数是不要声明类型的            {                return arg1 + arg2;            };            Console.WriteLine(plusFunc(9,6));            Func<int, int> testFunc = a => a+1;//lambda表达式的参数只有一个的时候可以不加上括号,当函数体的语句只有依据的时候,可以不加上大括号,也可以不加上return语句            Func<int, int> test2Func = (a) =>            {                return a + 1;            };            Console.ReadKey();
0 0
原创粉丝点击