1.lambda 匿名方法 匿名类型

  1. delegate void d1();
  2. d1 d = delegate(){Console.WriteLine("this is a test");}; //使用匿名方法
  3. d1 d += ()=>{Console.WriteLine("this_test2");}; //使用lambda表达式
  4. var q1 = new {name= "jing",age=25}; //匿名类型必须和var配合用
  5. var q2 = from c in a where c.age <20 select new {c.name,c,age = 21}; //匿名类型必须和var配合用
  6. var q3 = a.Where(c => c.age<20).Select(c=>c.name) //lambda表达式必须在linq 的投影语法中,lambda后面可以使用匿名类型,因为前面有var

匿名方法是委托常用方法的简化
lambda表达式是匿名方法的简化
他们都是包装了委托的意义,但是传递的其实都是方法,特别是有特色的lambda表达式,简化的写法有返回值
可以直接用需要返回值方法的地方
可以直接这样理解:因为lambda表达式传递的是方法,所以要么赋给其他委托来执行,要么放在可以执行方法的地方直接执行(这样返回的就是return回来的东西)

委托里面是方法的引用(指针),把委托给事件,就是把方法的引用给了事件

Event是delegate的抽象和封装,Event提供了安全的方法向delegate对象添加和删除方法

C#定义的三个泛型委托

Func<Tint,Tout> 有参数0-16个,有返回值

Predicate<T>    有参数1个,有bool返回值

Action<T>          有参数0-16个,无返回值

  1. static void Main(string[] args)
  2. {
  3. var arr = new List<int>() { -1, -2, -3, 0, 1, 2, 3, 4, 5, 6 };
  4. var d1 = new Predicate<int>(More);
  5. var d2 = new Predicate<int>(Less);
  6. var a1 = new Func<int,string>(Speak);
  7. string aa = a1(1123);
  8. Console.WriteLine(aa);
  9. Print(arr, d1);
  10. Print(arr, d2);
  11. Console.WriteLine("已经全部打印完了,请指示下一步操作");
  12. Console.ReadKey();
  13. }
  14. static string Speak(int i)
  15. {
  16. return (i ).ToString();
  17. }
  18. static void Print(List<int> aa, Predicate<int> dl)
  19. {
  20. foreach (var item in aa)
  21. {
  22. if (dl(item))
  23. {
  24. Console.WriteLine(item);
  25. }
  26. }
  27. }
  28. static bool More(int i)
  29. {
  30. if (i > 0)
  31. {
  32. return true;
  33. }
  34. return false;
  35. }
  36. static bool Less(int i)
  37. {
  38. if (i < 0)
  39. {
  40. return true;
  41. }
  42. return false;
  43. }
  44. }

委托的一个实例

  1. delegate void Speak(int i ); // 声明一个委托
  2. spike jy = new spike(); // 声明一个对象
  3. jy.lower += speak; // 给委托附加方法
  4. jy.lower += delegate { Console.WriteLine("this is very crazy man!"); }; // 给委托添加匿名方法
  5. jy.lower += (int i )=> Console.WriteLine("sadjfoisajfdoijsadofjodsaj");//匿名方法lambda表达式方式写法
  6. jy.to(10);

我记得委托 +=的时候会覆盖前一个方法的,为什么在执行的时候没有覆盖前一个方法?

我好像记得有一个地方是这样的,但是委托确实是多赋方法,一次运行多个方法的

C#-委托 lambda 匿名方法 匿名类型的更多相关文章

  1. 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型:解决方法

    http://blog.csdn.net/xiaochongchong1248/archive/2009/11/20/4841193.aspx?1271573283 编程环境要求:VS2008/FX2 ...

  2. 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }

    转自:http://www.cnblogs.com/xiaofei59/archive/2010/11/25/1887285.html 异常{ 无法将 匿名方法 转换为类型“System.Delega ...

  3. 关于委托:异常{ 无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型 }

    异常{ 无法将 匿名方法 转换为类型"System.Delegate",因为它不是委托类型 } 委托实际上是把方法名作为参数,但是若有好多个方法时,就要指明是哪个参数  查看如下代 ...

  4. Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)

    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...

  5. Delegate,Action,Func,匿名方法,匿名委托,事件

    一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld ...

  6. 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件

    Tks: http://www.cnblogs.com/yjmyzz/archive/2009/11/23/1608818.html 20150801 add: http://www.cnblogs. ...

  7. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质

    前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...

  8. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...

  9. 委托,匿名方法,Lambda,泛型委托,表达式树

    一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step0 ...

随机推荐

  1. WebStorm 6.0 与 7.0 注册码

    经测试 WebStorm 7均可以使用如下注册码,简直就是神key啊! WebStorm 6.0 与 7.0 注册码 User Name: EMBRACE License Key: ===== LIC ...

  2. BA-siemens-insight使用问题汇总

    insight安装完成后不要修改windows时间 1.如果在完成软件安装及授权后,更改了系统的时间,则软件会判断您电脑的时间已经更改,软件将无法启动,所以在软件完成正确安装后,禁止修改系统时间.更改 ...

  3. BA-给排水-供水系统自动控制(转载)

    浙江省建筑设计研究院划 杨绍胤 杨庆 摘 要:探讨供水系统变流量和恒压自动控制和设计方法.关键词: 供水系统 自动控制 传统给水系统常在屋顶设置高位水箱.水从地下水箱用水泵打到高位水箱.从高位水箱通过 ...

  4. 使用postman 测试restful接口

    前提: 在chrome网上应用商店安装postman 和 Postman Interceptor. 如下图: 使用postman的时候,最后开启postman Interceptor,如下图: 然后启 ...

  5. 使用 from import方法导入Python模块

    比如我们导入一个数学计算的模块 math: >>> import math>>> print math<module 'math' (built-in)> ...

  6. CentOS6.5下安装远程桌面服务端软件VNC Server

    VNC 使您能够远程訪问和控制您的计算机从还有一计算机或移动设备上,不管你在世界的不论什么地方. 常见的使用情形,包含给同事和朋友提供桌面支持.远程管理您的服务器. 将 VNC Server部署到您想 ...

  7. iOS-获取Model(设备型号)、Version(设备版本)、app(程序版本)等

    IOS-获取Model(设备型号).Version(设备版本).app(程序版本)等 NSLog(@"uniqueIdentifier: %@", [[UIDevice curre ...

  8. xcodeproj cannot be opened because the project file cannot be parsed.

    解决方法:    1.对.xcodeproj文件右键,显示包内容 2.双击打开 project.pbxproj 文件 3.找到以上类似的冲突信息(能够用commad + f搜索) 4.删除<&l ...

  9. 开源APM应用性能管理工具调研

    近期在设计一个DevOps平台.希望整合一个APM工具进来,由于APM既可用于性能測试也可用于运维性能监控,是典型的Dev+Ops产品. 商业的APM工具国内外已经有不少成熟产品了,而开源的好像不多见 ...

  10. Controller总结

    下图显示了组建之间的基本控制流程 1.1控制器工厂.动作调用器 控制器工厂负责创建对请求进行服务的控制器实例 动作调用其负责查找并调用控制器类中的动作方法. 1.2自定义控制器工厂 namespace ...