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

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

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

下面是示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace FuncTest
{
class Program
{
// 委托声明 -- 定义一个签名:
delegate double MathAction(double num);
static double Double(double input)
{
return input* ;
}
static void Main(string[] args)
{
//***********************普通委托
//使用一个方法实例化委托
MathAction ma = Double;
double result = ma(4.5);
Console.WriteLine(result.ToString()); //匿名方法
MathAction ma2 = delegate(double input)
{
return input * ;
};
Console.WriteLine(ma2()); //lambda表达式
MathAction ma3 = s => s * s * s;
Console.WriteLine(ma3()); //**********************Func<T,Tresult>委托
//利用Func,不用再显示定义委托
Func<double, double> ma4 = Double;
Console.WriteLine(ma4().ToString()); //利用Func,匿名方法
Func<double,double> ma5 = delegate (double input)
{
return input * input;
};
Console.WriteLine(ma5()); //利用Func,lambda表达式
Func<double, double> ma6 = s => s * s * s;
Console.WriteLine(ma6()); //和其他表达式结合
// 声明了一个Func委托类型的变量selector并用Lambda表达式进行实例化
// 这个Lambda表达式将用来获取一个字符串并将这个字符串转化为大写并返回
Func<string, string> selector = str => str.ToUpper(); // 创建一个字符串数组
string[] words = { "orange", "apple", "Article", "elephant" };
// 依次遍历这个字符串数组并调用委托实例selector进行处理
IEnumerable<String> aWords = words.Select(selector); // 输出结果到控制台
foreach (String word in aWords)
Console.WriteLine(word);
//**********************Action<T> 委托,与Func<T,TResult>唯一的区别就是没有返回值 Action<string> ma7 = delegate (string input)
{
Console.WriteLine(input);
};
ma7("from Action<string>"); //***********************Predicate<T>, 形式只有一个,传入一个参数,返回一个bool值
Predicate<string[]> predicate = delegate (string[] x)
{
var r = from p in x
where p.Contains("s")
select p;
if (r.ToList().Count > )
{
return true;
}
else
{
return false;
}
};
string[] _value = { "charlies", "nancy", "alex", "jimmy", "selina" }; if (predicate(_value))
{
Console.WriteLine("They contain.");
}
else
{
Console.WriteLine("They don't contain.");
} Console.ReadLine(); } }
}

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. 第4章 Selenium2-java WebDriver API (三)

    4.12  上传文件  4.12.1  sendKeys实现上传  html <html> <head> </head> <body> <div ...

  2. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API

    Java 8 日期时间 API Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理. 在旧版的 Java 中,日期时间 API 存在诸多问题,其中有: ...

  3. 精读JavaScript模式(四),数组,对象与函数的几种创建方式

    一.前言 放了个元旦,休息了三天,加上春运抢票一系列事情的冲击,我感觉我的心已经飞了.确实应该收收心,之前计划的学习任务也严重脱节了:我恨不得打死我自己. 在上篇博客中,笔记记录到了关于构造函数方面的 ...

  4. 高并发连接导致打开文件过多:java.io.IOException: Too many open files 解决方法

    用 CentOS 做 API 接口服务器供其他终端调用时,并发量高会报错:java.io.IOException: Too many open files. 其原因是在 Linux 下默认的Socke ...

  5. [JZOJ5970] Space

    Description 在一个四维空间中,给 \(4\) 个 \(n\) 的排列 \(A,B,C,D\),对于点 \((x,y,z,w)\) ,到点 \((A_x,B_y,C_z,D_w)\) 的花费 ...

  6. ABP框架

    https://aspnetboilerplate.com/ https://aspnetboilerplate.com/Pages/Documents http://www.cnblogs.com/ ...

  7. C#基础知识回顾-- 反射(2)

    使用反射调用方法: 一旦知道一个类型所支持的方法,就可以对方法进行调用.调用时,需使用包含在   MethodInfo中的Invoke()方法.调用形式:   object Invoke(object ...

  8. MVC之Ajax异步操作

    在页面的局部通过Html.Action加载一块分布页,我们可以通过Ajax异步去更换或更新这块分布页 通过一个下拉框值发生变化的时候,我们会去从后台重新访问这个action获取一个新的View,然后替 ...

  9. Matlab 根号的输入

    二次根号: sqrt(a)或a^0.5 三次根号: x^(1/3)或者x.^(1/3) 根据x的数据结构类型 矩阵.数组需要.^

  10. 基于webpack的react脚手架

    一.前言:react的cli开发模式太过于简单,好多东西都要自己配置 二.这里有个简单的配置,可以直接上手开发(不熟悉webpack和npm的绕路),已经完成的配置如下 1:默认ejs模板 2:编译l ...