委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板;(交流可以加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. 西门子PLC-1200 SCL语言开发学习笔记 (一)

    一.简介和背景 PLC一般使用梯形图开发,但是梯形图适合电工使用而不是程序员使用,对我们来说开发困难,门槛高,幸好PLC的开发标准还带了类pascal的高级语言,在西门子这里叫SCL语言,这对于我们程 ...

  2. Structs+Spring+Hibernate快速入门

    Structs+Spring+Hibernate,这是很经典的一个搭配,它的开发流程也比较程式化,下面以用户注册为例.     注册页面代码: <%@page contentType=" ...

  3. IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑

    开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了…… 1.开发者基本配置 (1) 公众平台官网登录 ...

  4. Linux 命令行下光标移动快捷键

    常用的快捷键: Ctrl + u 删除光标之前到行首的字符 Ctrl + k 删除光标之后到行尾的字符 Ctrl + a 光标移动到行首 Ctrl + e 光标移动到行尾 Ctrl + l 清屏 Al ...

  5. jQuery学习(1)猜数字游戏

      jQuery是一个快捷.小型且特征丰富的JavaScript库.它使得HTML文档遍历及操作,事件处理,动画,Ajax等更简洁方便.它通过调用一个简单易用的API,就能在各种浏览器中使用.由于jQ ...

  6. 延迟初始化Lazy

    延迟初始化出现于.NET 4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求.也可以称为,按需加载. 基本语法: Lazy<T> xx = new Lazy<T>(); ...

  7. c# 键值数据保存XML文件

    /// <summary> /// 键值数据保存XML文件 /// </summary> /// <param name="fileName"> ...

  8. jquery全选或不全选时,不操作已经禁用的checkbox

    $("#selectAll").click(function(){ if(this.checked ){ $(":checkbox[name='equid']" ...

  9. 外边距塌陷 margin collapsing

    块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距, 这种行为称为外边距塌陷(margin collapsing),有的地方翻译为外边距合并. 1.相邻的兄弟姐妹 ...

  10. css文本溢出隐藏显示省略号(单行+多行)

    文本超出若干行就换行,这个功能几乎每个文本浏览网站都会用到,实现它的办法也有很多,今天简单的介绍一下实现它的方法.  一. 单行文本不换行,并将超出文本隐藏 .box-content{     ove ...