委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板;(交流可以加qq群:568055323)

委托常见的方式有一般委托显示定义,Func<T,TResult> (T,表示传入参数的类型,TResult)表示返回的类型,可以最多有四个参数传入,

Action<T>,与Func的唯一区别是没有返回值;Predicate <T>就比较多单一了, 只能传入一个参数,然后返回一个bool值。

下面是示例代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace FuncTest
  7. {
  8. class Program
  9. {
  10. // 委托声明 -- 定义一个签名:
  11. delegate double MathAction(double num);
  12. static double Double(double input)
  13. {
  14. return input* ;
  15. }
  16. static void Main(string[] args)
  17. {
  18. //***********************普通委托
  19. //使用一个方法实例化委托
  20. MathAction ma = Double;
  21. double result = ma(4.5);
  22. Console.WriteLine(result.ToString());
  23.  
  24. //匿名方法
  25. MathAction ma2 = delegate(double input)
  26. {
  27. return input * ;
  28. };
  29. Console.WriteLine(ma2());
  30.  
  31. //lambda表达式
  32. MathAction ma3 = s => s * s * s;
  33. Console.WriteLine(ma3());
  34.  
  35. //**********************Func<T,Tresult>委托
  36. //利用Func,不用再显示定义委托
  37. Func<double, double> ma4 = Double;
  38. Console.WriteLine(ma4().ToString());
  39.  
  40. //利用Func,匿名方法
  41. Func<double,double> ma5 = delegate (double input)
  42. {
  43. return input * input;
  44. };
  45. Console.WriteLine(ma5());
  46.  
  47. //利用Func,lambda表达式
  48. Func<double, double> ma6 = s => s * s * s;
  49. Console.WriteLine(ma6());
  50.  
  51. //和其他表达式结合
  52. // 声明了一个Func委托类型的变量selector并用Lambda表达式进行实例化
  53. // 这个Lambda表达式将用来获取一个字符串并将这个字符串转化为大写并返回
  54. Func<string, string> selector = str => str.ToUpper();
  55.  
  56. // 创建一个字符串数组
  57. string[] words = { "orange", "apple", "Article", "elephant" };
  58. // 依次遍历这个字符串数组并调用委托实例selector进行处理
  59. IEnumerable<String> aWords = words.Select(selector);
  60.  
  61. // 输出结果到控制台
  62. foreach (String word in aWords)
  63. Console.WriteLine(word);
  64. //**********************Action<T> 委托,与Func<T,TResult>唯一的区别就是没有返回值
  65.  
  66. Action<string> ma7 = delegate (string input)
  67. {
  68. Console.WriteLine(input);
  69. };
  70. ma7("from Action<string>");
  71.  
  72. //***********************Predicate<T>, 形式只有一个,传入一个参数,返回一个bool值
  73. Predicate<string[]> predicate = delegate (string[] x)
  74. {
  75. var r = from p in x
  76. where p.Contains("s")
  77. select p;
  78. if (r.ToList().Count > )
  79. {
  80. return true;
  81. }
  82. else
  83. {
  84. return false;
  85. }
  86. };
  87. string[] _value = { "charlies", "nancy", "alex", "jimmy", "selina" };
  88.  
  89. if (predicate(_value))
  90. {
  91. Console.WriteLine("They contain.");
  92. }
  93. else
  94. {
  95. Console.WriteLine("They don't contain.");
  96. }
  97.  
  98. Console.ReadLine();
  99.  
  100. }
  101.  
  102. }
  103. }

C#常见委托のdelegate定义,Func,Action,Predicate总结的更多相关文章

  1. 浅谈C#中常见的委托<Func,Action,Predicate>(转)

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...

  2. 委托、多播委托、泛型委托Func,Action,Predicate,ExpressionTree

    当试图通过一个事件触发多个方法,抽象出泛型行为的时候,或许可以考虑使用委托.     通过委托构造函数或委托变量把方法赋值给委托 private delegate double DiscountDel ...

  3. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...

  4. lambda表达式不使用委托(delegate) 用FUNC

    lLambda不使用delegate关键字,而使用  Lambda运算符 => goes to l    1.Func<int,string> getInput = (int age ...

  5. C#の----Func,Action,predicate在WPF中的应用

    首先介绍下,winform中可以用this.invoke来实现:wpf中要使用调度器Control.Despite.invoke: (Action)(()=> { })和 new Action ...

  6. 为什么不能把委托(delegate)放在一个接口(interface)当中?

    stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...

  7. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...

  8. C#委托的介绍(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Deleg ...

  9. C#委托的介绍(delegate、Action、Func、predicate) --转载

    来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

随机推荐

  1. 深度学习论文翻译解析(一):YOLOv3: An Incremental Improvement

    论文标题: YOLOv3: An Incremental Improvement 论文作者: Joseph Redmon Ali Farhadi YOLO官网:YOLO: Real-Time Obje ...

  2. Go语言学习笔记(二) [变量、类型、关键字]

    日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号.   2.Go 同其他语言不同的地方在于变 ...

  3. Extjs4.2+webAPI+EF实现分页以及webapi的数据传值

    由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下 1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado.net实体数据模型 2.就是后台 ...

  4. 【ichart】简单的统计图表ichart.js的使用

    1.首先下载,点击下载 2.只需要这一个js,粘贴赋值到自己项目中即可.   3.引入js <script type="text/javascript" src=" ...

  5. Nginx学习笔记(三)--- Nginx实现反向代理和配置负载均衡

    1.反向代理 2.Nginx反向代理流程图 3.安装多个tomcat 3.1把tomcat的压缩包传到Linux上 3.2 解压tomcat 3.3 给压缩好的tomcat改个名字用来区分一下 3.4 ...

  6. LSApplicationQueriesSchemes--关于info.plist 第三方登录 添加URL Schemes白名单

    近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装. 当你的应用在iOS 9 ...

  7. asynchronous.js

    // 异步加载js (function(){ var _asyn_js_data = ['index.js','index1.js','index2.js','index3.js'] for(var ...

  8. 洛谷P3346 [ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)

    题意 题目链接 Sol 广义SAM的板子题. 首先叶子节点不超过20,那么可以直接对每个叶子节点为根的子树插入到广义SAM中. 因为所有合法的答案一定是某个叶子节点为根的树上的一条链,因此这样可以统计 ...

  9. 前端打包文件在 nginx 上 403 的解决办法

    遇到的问题表现出来就是如题所述,因此作为题目. 我们知道,前端有很多方便的构建和打包工具,如 webpack 等,通常我们会把前端文件打包到dist目录下,部署到服务器上,如 nginx 等. 这次遇 ...

  10. Chrome浏览器跨域

    配置新版Chrome浏览器跨域,需要创建用户数据文件夹,在其中保存浏览器的缓存.历史记录.收藏夹等数据. Windows系统Chrome跨域 1 下载Chrome 64位绿色版,解压缩,并在桌面创建快 ...