委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板;(交流可以加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. Struts2学习(四)———— ognl表达式、值栈、actionContext之间的关系

    一.什么是Ognl? 通过百度百科查询到的解释,其中详细的说明了OGNL的作用. 下面我们就对OGNL这5个作用进行讲解 1.存取对象的任意属性,简单说就是对javabean进行操作(重要) 2.调用 ...

  2. OpenCV3三种超像素分割算法源码以及效果

    OpenCV3中超像素分割算法SEEDS,SLIC, LSC算法在Contrib包里,需要使用Cmake编译使用.为了方便起见,我将三种算法的源码文件从contrib包里拎了出来,可以直接使用,顺便比 ...

  3. angularjs学习第七天笔记(系统指令学习)

    您好,接着在昨天对简单指令学习了解以后,今天开始学习了解angularjs中的系统指令 系统指令大部分都是以ng开始,这也是为什么在自定义指令命名时不要以ng开始的原因所在 系统指令在学习了分成两个部 ...

  4. 【Java基础】13、抽象方法不能是static或native或synchroniz 原因及误解

    在网上看到过这么一篇文章,是关于抽象方法不能是static或native或synchroniz 的原因.其中提到了这些关键字的意义以及与 abstract 关键字的冲突,大体内容如下: 1.abstr ...

  5. html页面字体相关

    <!doctype html> <html> <head> <meta charset="utf-8"/> <title> ...

  6. linux基础学习之软件安装以及常用命令

    linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...

  7. CSS盒模型的介绍

    CSS盒模型的概念与分类      CSS盒模型就是一个盒子,封装周围的HTML元素,它包括内容content.边框border.内边距padding.外边距margin. CSS盒模型分为标准模型和 ...

  8. 无法给MySQL root用户修改密码的解决方法

    本人编译安装完MySQL数据库,想给root用户修改密码,结果无法修改,并且报错,报错大概信息如下: mysqladmin: connect to server at 'localhost' fail ...

  9. Nginx 增加 Image 缩略图 功能

            Nginx 增加 Image 缩略图功能,需要使用Nginx Image 缩略图 模块     官网地址:https://github.com/3078825/ngx_image_th ...

  10. loadrunner 脚本开发-文件下载

    脚本开发-文件下载 by:授客 QQ:1033553122 下载简介 对 HTTP协议来说,无论是下载文件或者请求页面,对客户端来说,都只是发出一个GET请求,并不会记录点击后的“保存”.“另存为操作 ...