C#的泛型委托Predicate/Func/Action】的更多相关文章

Predicate 泛型委托  表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素.看看下面它的定义: // Summary:    //     Represents the method that defines a set of criteria and determines whether    //     the specified object meets those criteria.    ////…
Predicate 泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 类型参数介绍:    T: 要比较的对象的类型.    obj: 要按照由此委托表示的方法中定义的条件进行比较的对象. 返回值:如果 obj 符合由此委托表示的方法中定义的条件,则为 true:否则为 false. 看下面代码 public class GenericDelegateDemo{    List<String> list…
Predicate<T> 是一个委托,它代表了一个方法,它的定义是: namespace System {    // 摘要:    表示定义一组条件并确定指定对象是否符合这些条件的方法.  // 参数:    //   obj:    要按照由此委托表示的方法中定义的条件进行比较的对象.  // 类型参数:    //   T:    要比较的对象的类型.        // 返回结果:    //     如果 obj 符合由此委托表示的方法中定义的条件,则为 true:否则为 false…
Predicate Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素.通过查看源码发现 Predicate  Array 先来看一下Array.FindAll 构建一个字符串类型的数组进行演示测试 第一种方式 string[] arrayString = new string[] { "One","Two","Three","Fo…
一.举一委托场景:天气很热,二狗子想去买瓶冰镇可乐,但是二狗子很懒,于是他想找个人代他去,于是要有个代理人. 创建代理人之前先定义委托:public delegate string BuyColaDelegate(string drink); 创建代理人:BuyColaDelegate delegate = new BuyColaDelegate();(错误代码) 那么问题来了,这个代理人需要绑定一个方法啊,不然他知道自己去干啥,所以需要创建一个真正的代理人: BuyColaDelegate d…
Func.Action和Predicate是.NET自带的3个泛型委托方法,三个方法的区别其实并不大,要强行给混着用也是可以的,但是我们是有追求的人,把道理讲清楚总是好的. 一.Func是有返回值的方法(类似于Delphi里面的function),Func最多支持16个泛型参数和1个泛型返回值(最后一个固定为返回值),并且支持Lambda表达式 //无参数用法 Func<string> funcNone = delegate() { return "我是来打酱油的"; };…
今天继续分享泛型委托的Predicate<T>,上篇文章讲了Action委托,这个比Action委托功不一样的地方就是委托引用方法是Bool返回值的方法,Action为无返回值.首先我们看一下它的定义吧: public delegate bool Predicate<T>(T obj); 从其定义可以看到,此委托引用一个返回bool 值的方法,在实际开发中,通常使用Predicate<T>委托变量引用一个“判断条件函数”,在判断条件函数内部书写代码表明函数参数所引用的对…
一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. public class Calculator2 { //传统解决方案一:在该类中声明多个方法,分别是加倍.平方.立方的方法 //传统解决方案二:在该类中声明一个万能方法,通过传递不同的参数类型来区分是执行加倍还是平方或者立方操作 //解决方案三:声明一个万能方法,传递一个委托进来,相当于传递了一个业…
1.匿名方法的概念:一个方法没有具体的名称,而只有关键字delegate.方法参数.方法体.这种方法是匿名方法. 匿名方法的好处:将具体方法和委托直接关联在一起,如果我们基于委托只需要一个方法的时候,匿名方法肯定显得简单. 2.Lambda表达式:在C#3.0出现的.使用这种表达的可以更简练的编写代码块. CalculatorDelegate cal3 = (int a, int b) => { return a + b; }; CalculatorDelegate cal4 = (a, b)…
lSystem.Func 代表有返回类型的委托 lpublic delegate TResult  Func<out TResult>(); lpublic delegate TResult  Func<in T, out TResult>(T arg); l...... l注:输入泛型参数-in 最多16个,输出泛型参数 -out 只有一个. lSystem.Action 代表无返回类型的委托 lpublic delegate void Action<in T>(T…
1.什么是Func委托 Func委托代表有返回类型的委托 2.Func委托定义 查看Func的定义: using System.Runtime.CompilerServices; namespace System { // // 摘要: // 封装一个方法,该方法具有两个参数,并返回由 TResult 参数指定的类型的值. // // 参数: // arg1: // 此委托封装的方法的第一个参数. // // arg2: // 此委托封装的方法的第二个参数. // // 类型参数: // T1:…
写在前面 Delegate Predicate Action Func 逆变和协变 先说下什么是委托(Delegate),委托在C#中是一种类型,和Class是一个级别,但是我们经常把它看做是一个方法.为什么是方法?准确的说应该是回调函数,在C运行时的qsort函数获取指向一个回调函数的指针,以便对数组中的元素进行排序.C#中提供了一种机制,就是委托,一种回调函数的机制. 在我们做项目的过程中,委托用到的地方很多,像线程中修改窗体的状态.窗体控件事件和异步操作已完成等,以前我们创建委托的时候用d…
1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完成,而在C#中也可这样理解为委托就是动态调用方法.委托就是一个类,它定义了一个类,使得可以将方法当做另一个方法参数传递,这种将方法动态的赋给参数的做法,可以避免我们在程序中使用大量的 If-Else语句,同时使得程序具有更好的可拓展性. 2. delegate Delegate至少0个参数,至多32…
      委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用delegate关键字声明一个委托,实质上创建了System.Del…
委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基本上依赖于委托.C#的delegate关键字用于声明委托,它具有将声明委托类型映射到System.Delegate类的能力,System.Delegate类位于mscorlib.dll中,是.NET的基础核心类之一.使用delegate关键字声明一个委托,实质上创建了System.Delegate的…
C#的内置委托类型 Func Action 返回值 有(只有一个Tresult) 无 重载 17个(0参-16参) 17个(0参-16参) 泛型 支持 支持 系统内置 是 是 是否需要声明 否 否 class Class1 { public delegate void Del();//声明委托 public static void F1() { Console.WriteLine("第一个方法"); } public static void F2() { Console.WriteLi…
1.什么是Action泛型委托 Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托.封装的方法必须与此委托定义的方法签名相对应.也就是说,封装的方法必须具有一个通过值传递给它的参数,并且不能有返回值. 2.Action委托定义 查看Action的定义: using System.Runtime.CompilerServices; namespace System { // // 摘要: //…
delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void DelegateMethod(); //声明了一个Delegate Type public DelegateMethod delegateMethod; //声明了一个Delegate对象 var test = new TestDelegate(); test.delegateMethod = n…
目录 # 什么是委托 # 委托声明.实例化和调用 1.声明 2.委托的实例化 3.委托实例的调用 4.委托完整的简单示例 #泛型委托 1.Func委托 2.Action委托 3.Predicate委托 #匿名委托 #Lambda表达式 1.表达式Lambda 2.语句Lambda 3.Lambda的主要用处 #多播委托 #参考: # 什么是委托 1.从数据结构来讲,委托是和类一样是一种用户自定义类型. 2.委托是方法的抽象,它存储的就是一系列具有相同参数和返回类型的方法的地址.调用委托的时候,委…
C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992   版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可转载,然需明根以溯源. https://blog.csdn.net/wnvalentin/article/details/81840339 目录 1 委托的含义 2 委托声明.实例化和调用 2.1 委托的声明 2.2 委托的实例化 2.3 委托实例的调用 3 泛型委托 3.1 Func委托 3.…
Func.Action 一.如果不是声明为泛型委托 委托的类型名称不能重载,也就是不能名字相同类型参数不同 二..Net中内置两个泛型委托Func.Action(在“对象浏览器”的mscorlib的System下),日常开发中基本不用自定义委托类型了. 三.Func是有返回值的委托:Action是没有返回值的委托 四..Action<T>是.NET Framework内置的泛型委托,可以使用Action<T>委托以参数形式传递方法,而不用显示声明自定义的委托.封装的方法必须与此委托…
(转载网络文章) (1). delegate delegate我们常用到的一种声明   Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.   例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型. (2). Action Action是无返回值的泛型委托. Action 表示无参,无返回值的委托 Action<int,string> 表示有传入参数int,string无返回值的委…
当试图通过一个事件触发多个方法,抽象出泛型行为的时候,或许可以考虑使用委托.     通过委托构造函数或委托变量把方法赋值给委托 private delegate double DiscountDelegate(double discount); private static DiscountDelegate dd = getDiscountRate; static void Main(string[] args) { double discountPercent; discountPercen…
[Action] 无返回值 的泛型委托,可以有0~16个参数(函数重载) public delegate void Action(); // 无参数 public delegate void Action<in T>(T obj); // 1个参数 public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2); // 2个参数 // ...... 最多16个参数 // 使用举例 Action action0 = () =&g…
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 一.委托的声明   (1) delegate delegate我们常用到的一种声明 Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型. 例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型. (2)Action Action是无返回值的泛型委托. Action 表示无参,无返回值的…
一.前言 刚开始工作的时候,觉得委托和事件有些神秘,而当你理解他们之后,也觉得好像没有想象中的那么难.在项目中运用委托和事件,你会发现他非常棒,这篇博文算是自己对委托和事件的一次梳理和总结. 二.委托 C#中的委托,相当于C++中的指针函数,但委托是面向对象的,是安全的,是一个特殊的类,当然他也是引用类型,委托传递的是对方法的引用. 2.1.delegate 声明委托就必须使用关键字“delegate”,委托是先声明,后实例化.至少0个参数,至多32个参数 格式如下所示: private del…
引用别人的: static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b"); l.Add("s"); l.Add("t"); if (l.Exists(s => s.Equals("s"))) { string str = l.First(s =>…
本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b");…
使用委托来做一些事情,大致思路是: 1.定义声明一个委托,规定输入参数和输出类型.2.写几个符合委托定义的方法.3.把方法列表赋值给委托4.执行委托 internal delegate int MyDelegate(); class Program { static void Main(string[] args) { MyDelegate d = ReturnOne; d += ReturnTwo; foreach (int i in GetAllReturnVals(d)) { Consol…
1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyBookDel myBookDel; //普通方法 public static void MathBook(int a) { Console.WriteLine("我是数学书" + a); } static void Main(string[] args) { myBookDel += Ma…