委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。

1.委托的声明

delegate我们常用到的一种声明

delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。

namespace ConsoleApplication1
{
class Program
{
delegate void NumDelegate(int num);
static void Main(string[] args)
{
AClass _a = new AClass();
_a.cwdelegate = _a.AddNum;
_a.cwdelegate();
NumDelegate num20delegate = new NumDelegate(Add20);
Console.WriteLine("-------------------------------------------");
NumDelegate adddelegate = new NumDelegate(_a.AddNum);
NumDelegate subdelegate = new NumDelegate(_a.SubNum);
NumDelegate num30delegate = adddelegate + subdelegate;
num30delegate();
Console.WriteLine("-------------------------------------------");
num30delegate += num20delegate;
num30delegate();
Console.WriteLine("-------------------------------------------");
num30delegate += adddelegate;
//去掉最后一个adddelegate
num30delegate -= adddelegate;
num30delegate();
Console.ReadLine();
}
static void Add20(int num)
{
Console.WriteLine(string.Format("Add20: {0}", num));
}
} class AClass
{
public int result = ;
public delegate void CWDelegate(int num);
public CWDelegate cwdelegate;
public void AddNum(int num)
{
Console.WriteLine(string.Format("AddNum: {0}", num));
} public void SubNum(int num)
{
Console.WriteLine(string.Format("SubNum: {0}", num));
}
}
}

2. Action

Action是无返回值的泛型委托。

Action 表示无参,无返回值的委托

Action<int,string> 表示有传入参数int,string无返回值的委托

Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

Action至少0个参数,至多16个参数,无返回值。

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
AClass _a = new AClass();
_a.cwdelegate = _a.AddNum;
_a.cwdelegate(); Console.WriteLine("-------------------------------------------");
Action<int> act1 = _a.SubNum;
Action<int> act2 = _a.AddNum;
Action<int> act3 = act1 + act2;
act3();
Console.WriteLine("-------------------------------------------");
act3 += _a.cwdelegate;
act3();
Console.WriteLine("-------------------------------------------");
act3 -= _a.cwdelegate;
act3();
Console.ReadLine();
}
static void Add20(int num)
{
Console.WriteLine(string.Format("Add20: {0}", num));
}
} class AClass
{
public int result = ;
public Action<int> cwdelegate;
public void AddNum(int num)
{
Console.WriteLine(string.Format("AddNum: {0}", num));
} public void SubNum(int num)
{
Console.WriteLine(string.Format("SubNum: {0}", num));
}
}
}

3. Func

Func是有返回值的泛型委托

Func<int> 表示无参,返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

    class Program
{
static void Main(string[] args)
{
Console.WriteLine(Test<int, int>(Fun, , ));
Console.ReadKey();
}
public static int Test<T1, T2>(Func<T1, T2, int> func, T1 a, T2 b)
{
return func(a, b);
}
private static int Fun(int a, int b)
{
return a + b;
}
}

4. predicate的使用

泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。

    class Program
{
static void Main(string[] args)
{
int[] array = new int[] { , , , , , , , , , };
var first = Array.Find(array, ProductGT10);
Console.WriteLine("Found: X = {0}", first);
Console.ReadKey();
}
private static bool ProductGT10(int x)
{
return x % == ;
}
}

C#的委托(delegate、Action、Func、predicate)的更多相关文章

  1. Delegate,Action,Func,Predicate的使用与区别

    C#4.0推出后,类似Linq,Lamda表达式等许多新的程序写法层次不穷.与之相关的Delegate,Action,Func,Predicate的使用和区别也常常让大家迷惑,此处就结合实际的应用,对 ...

  2. 委托delegate,Action,Func,Predicate

    C#委托的介绍(delegate.Action.Func.predicate) 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 ...

  3. C# 委托应用总结(委托,Delegate,Action,Func,predicate)

    C# 委托应用总结 一.什么是委托 1.1官方解释 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 1.2个人理解 委托就是执 ...

  4. (C#) Action, Func, Predicate 等泛型委托

    (转载网络文章) (1). delegate delegate我们常用到的一种声明   Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.   例:public del ...

  5. Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)

    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...

  6. Delegate,Action,Func,匿名方法,匿名委托,事件

    一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld ...

  7. c# Action,Func,Predicate委托

    System命名空间下已经预先定义好了三中泛型委托,Action,Func和Predicate,这样我们在编程的时候,就不必要自己去定义这些委托了 Action是没有返回值的 Func是带返回值的 不 ...

  8. 【Unity|C#】基础篇(11)——内置的泛型委托(Action/Func/Predicate)

    [Action] 无返回值 的泛型委托,可以有0~16个参数(函数重载) public delegate void Action(); // 无参数 public delegate void Acti ...

  9. 委托,C#本身的委托(Action Func)

    1.Action 分为带泛型的和不带泛型的,带泛型可传入任何类型的参数. 格式如下: using System; using System.Collections.Generic; using Sys ...

  10. 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件

    Tks: http://www.cnblogs.com/yjmyzz/archive/2009/11/23/1608818.html 20150801 add: http://www.cnblogs. ...

随机推荐

  1. Codeforces 219D - Choosing Capital for Treeland(树形dp)

    http://codeforces.com/problemset/problem/219/D 题意 给一颗树但边是单向边,求至少旋转多少条单向边的方向,可以使得树上有一点可以到达树上任意一点,若有多个 ...

  2. Said

    呃~~生活中的每天都会经历很多事儿,而影响结果的无非就是人对事物的处理方式和对事物的处理态度~~ 在上学期间,有时考试不理想,我都会进行反思,对不该错的题巩固在三,对不会做的题查缺补漏……因为不能不思 ...

  3. html接收参数

    代码 <!DOCTYPE html> <html> <head> <title>html接收参数</title> </head> ...

  4. Syncfusion HTMLUI研究一

    HTMLUI可以加载HTML页面,并且相比WebKit等占用资源特别少 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitiona ...

  5. Javaweb学习笔记——(三)——————JavaScript基础&DOM基础

    day031.js的String对象 **创建String对象 ***var str = "abc"; **方法和属性(文档) ***属性 lenth:字符串的长度 ***方法 ( ...

  6. luogu P4162 [SCOI2009]最长距离

    传送门 可以枚举两个点然后计算答案,至于是否合法,就要看可不可以通过移不超过\(t\)个箱子使得两点连通,也可以看做找一条路径使得路径上的1个数不超过\(t\) 所以可以考虑最短路,相邻的点两两连边, ...

  7. SpringMVC上传文件的三种方式(待整理...)

    参考链接 http://www.cnblogs.com/fjsnail/p/3491033.html

  8. Broadcast的类型

    两种发送方法 1.无序广播 对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响.对于这种广播,接收者无法终止广播,即无法阻止其他接收者的 接收动作. 消 ...

  9. Java中在特定区间产生随机数

    生成指定范围内的随机数 这个是最常用的技术之一.程序员希望通过随机数的方式来处理众多的业务逻辑,测试过程中也希望通过随机数的方式生成包含大量数字的测试用例.问题往往类似于: 如何随机生成 1~100 ...

  10. 【逆向知识】动态调试技巧-C++代码逆向

    1.C++类代码的特点 寄存器ECX传参时一般用作this指针(对象地址)或是计数器. 有ecx传参的call,是成员函数,构造函数,析构函数 能访问成员变量的函数都会有ecx传参 静态函数.全局函数 ...