博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#基础知识--委托,匿名方法,Lambda
阅读量:5905 次
发布时间:2019-06-19

本文共 2228 字,大约阅读时间需要 7 分钟。

  • 委托(代理)

 委托:是一种定义方法签名的类型。(注意是类型!)用于将方法作为参数传递给其它方法。

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还有其他方面的用处),两者都只是让代码更简洁,但在更底层层次本质是一样的

转载于:https://www.cnblogs.com/mane/archive/2012/04/13/2446242.html

你可能感兴趣的文章
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
更改UIView的背景
查看>>
Prometheus安装部署以及配置
查看>>
Web开发之-DOM操作对象
查看>>
APUE第15章学习扎记之程序的存储区布局试验
查看>>
ubuntu升级16.04 inter idea 中文输入法无效
查看>>
三目运算判断jsp脚本里面的值
查看>>
sshtunnel在本地访问云服务器mysql
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>
我的友情链接
查看>>
CDN相关
查看>>
Tomcat的设置4——Tomcat的体系结构与设置基于端口号的虚拟主机
查看>>