C#基础知识--委托,匿名方法,Lambda
2012-04-13 18:46
453 查看
委托(代理)
委托:是一种定义方法签名的类型。(注意是类型!)用于将方法作为参数传递给其它方法。
注意:本例中你会发现委托不是静态的却调用了静态的方法,是的,委托可以调用静态和非静态方法,你可以自己试试!
匿名方法
匿名方法就是没有名字的方法(函数),既然没有名字,就是说只有在定义的时候能调用,在其他地方就不能调用了,匿名方法都是和委托连在一起用的(以后还有lambda表达式),以前创建委托实例时需要传递一个函数名给它作为参数,现在可以通过匿名方法直接把一段代码传进去了,定义匿名方法:用到delegate关键字。
如:delegate(int a, int b){return a > b ?a : b ;}
代码定义了一个匿名方法,该方法的参数是 int a 和 int b ,方法体是 {return a > b ? a : b}。
总结:匿名方法就是没有名字的方法,只能通过委托来被调用(这句话可能有误,匿名方法也可以直接订阅事件作为事件处理函数,当事件发生时就接收相应参数并执行函数体)。
Lambda
上面说到可以通过匿名方法以内联代码的方式来简介地实现委托,但还有更简洁的方法,那就是用lambda表达式来代替匿名方法,在这里,lambda表达式就是匿名方法的简洁版。
Lambda表达式的语法如下:
(param1, param2 ...,paramN) =>
{
表达式1;
表达式2;
return 返回值;
}
param1, param2 ...,paramN 就是参数,不用确定类型,编译器会做这个工作,花括号了就是lambda表达式要执行的语句,如果对应的委托类型有返回值,那么就要有return 语句。
总结:匿名方法就是没有名字的函数,Lambda表达式就是匿名方法的简洁版(指的是用在委托上这方面,Lambda还有其他方面的用处),两者都只是让代码更简洁,但在更底层层次本质是一样的
委托:是一种定义方法签名的类型。(注意是类型!)用于将方法作为参数传递给其它方法。
class Program { //定义一个返回值为int的委托MyDelegate public delegate int MyDelegate(int x, int y); //定义一个委托需要接管的方法 static int MyFunction(int x, int y) { return x + y; } static void Main(string[] args) { //构造一个委托的对象,并指向运行一个方法 MyDelegate myDelegate = new MyDelegate(MyFunction); //利用委托对象传入参数执行相应的方法并返回一个值 int tmp = myDelegate(1, 2); Console.WriteLine(tmp); Console.ReadKey(); } }
注意:本例中你会发现委托不是静态的却调用了静态的方法,是的,委托可以调用静态和非静态方法,你可以自己试试!
匿名方法
匿名方法就是没有名字的方法(函数),既然没有名字,就是说只有在定义的时候能调用,在其他地方就不能调用了,匿名方法都是和委托连在一起用的(以后还有lambda表达式),以前创建委托实例时需要传递一个函数名给它作为参数,现在可以通过匿名方法直接把一段代码传进去了,定义匿名方法:用到delegate关键字。
如:delegate(int a, int b){return a > b ?a : b ;}
代码定义了一个匿名方法,该方法的参数是 int a 和 int b ,方法体是 {return a > b ? a : b}。
class Program { //定义一个返回值为int的委托MyDelegate public delegate int MyDelegate(int x, int y); static void Main(string[] args) { //构造一个委托的对象,并指向运行匿名方法 MyDelegate myDelegate = delegate(int x, int y) { return x + y; }; //利用委托对象传入参数执行相应的方法并返回一个值 int tmp = myDelegate(1, 2); Console.WriteLine(tmp); Console.ReadKey(); } }
总结:匿名方法就是没有名字的方法,只能通过委托来被调用(这句话可能有误,匿名方法也可以直接订阅事件作为事件处理函数,当事件发生时就接收相应参数并执行函数体)。
Lambda
上面说到可以通过匿名方法以内联代码的方式来简介地实现委托,但还有更简洁的方法,那就是用lambda表达式来代替匿名方法,在这里,lambda表达式就是匿名方法的简洁版。
Lambda表达式的语法如下:
(param1, param2 ...,paramN) =>
{
表达式1;
表达式2;
return 返回值;
}
param1, param2 ...,paramN 就是参数,不用确定类型,编译器会做这个工作,花括号了就是lambda表达式要执行的语句,如果对应的委托类型有返回值,那么就要有return 语句。
class Program { //定义一个返回值为int的委托MyDelegate public delegate int MyDelegate(int x, int y); static void Main(string[] args) { //构造一个委托的对象,并指向运行lambda匿名方法 MyDelegate myDelegate = (int x, int y) =>{ return x + y; }; //利用委托对象传入参数执行相应的方法并返回一个值 int tmp = myDelegate(1, 2); Console.WriteLine(tmp); Console.ReadKey(); } }
总结:匿名方法就是没有名字的函数,Lambda表达式就是匿名方法的简洁版(指的是用在委托上这方面,Lambda还有其他方面的用处),两者都只是让代码更简洁,但在更底层层次本质是一样的
相关文章推荐
- C# 匿名委托、匿名方法、匿名对象、Lambda表达式
- C#基础:委托、匿名方法、事件
- [C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
- [C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
- C#学习之初步理解委托、事件、匿名方法和Lambda
- c#基础知识---匿名方法
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- [C# 基础知识梳理系列]专题三:如何用委托包装多个方法——委托链
- C# 传统的委托、匿名方法、Lambda对比
- c# 中的委托以及匿名方法lambda
- [C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
- C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。
- C#学习之初步理解委托、事件、匿名方法和Lambda
- 为LINQ服务的C#新特性总结篇---扩展方法,匿名委托,lambda表达式,Action委托,Func委托,Linq中的order by,top和sum函数
- 编写高质量代码改善C#程序的157个建议[为泛型指定初始值、使用委托声明、使用Lambda替代方法和匿名方法]
- 十二、C# 委托与Lambda表达式(匿名方法的另一种写法)
- C#委托基础7——匿名方法
- [C# 基础知识系列]专题十一:匿名方法解析
- C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
- 【转】[C# 基础知识系列]专题十一:匿名方法解析