C#的委托(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
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)的更多相关文章
- Delegate,Action,Func,Predicate的使用与区别
C#4.0推出后,类似Linq,Lamda表达式等许多新的程序写法层次不穷.与之相关的Delegate,Action,Func,Predicate的使用和区别也常常让大家迷惑,此处就结合实际的应用,对 ...
- 委托delegate,Action,Func,Predicate
C#委托的介绍(delegate.Action.Func.predicate) 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 ...
- C# 委托应用总结(委托,Delegate,Action,Func,predicate)
C# 委托应用总结 一.什么是委托 1.1官方解释 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 1.2个人理解 委托就是执 ...
- (C#) Action, Func, Predicate 等泛型委托
(转载网络文章) (1). delegate delegate我们常用到的一种声明 Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型. 例:public del ...
- Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)
Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...
- Delegate,Action,Func,匿名方法,匿名委托,事件
一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 public void HelloWorld ...
- c# Action,Func,Predicate委托
System命名空间下已经预先定义好了三中泛型委托,Action,Func和Predicate,这样我们在编程的时候,就不必要自己去定义这些委托了 Action是没有返回值的 Func是带返回值的 不 ...
- 【Unity|C#】基础篇(11)——内置的泛型委托(Action/Func/Predicate)
[Action] 无返回值 的泛型委托,可以有0~16个参数(函数重载) public delegate void Action(); // 无参数 public delegate void Acti ...
- 委托,C#本身的委托(Action Func)
1.Action 分为带泛型的和不带泛型的,带泛型可传入任何类型的参数. 格式如下: using System; using System.Collections.Generic; using Sys ...
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
Tks: http://www.cnblogs.com/yjmyzz/archive/2009/11/23/1608818.html 20150801 add: http://www.cnblogs. ...
随机推荐
- new和delete
和 sizeof 类似,sizeof不是函数,它是一个操作符,它在编译期就完成了计算,在函数运行期间它已经是一个常数值了. int a; sizeof(int) = 4; sizeof(a) = 4; ...
- C# redis简单的使用
1.项目一:用于在Redis中添加数据 using System; using System.Collections.Generic; using System.Linq; using System. ...
- float导致出现大面积空白
float导致出现大面积空白,解决方法: *{ padding: 0; margin: 0; overflow:hidden; }
- JavaScript之函数调用与被调用的上下文对象this
不同的调用机制决定了函数上下文对象的不同: 1. 作为普通函数进行调用时,其上下文是全局对象window; 2. 作为(对象)方法进行调用时,其上下文对象时拥有该方法的对象; 3. 作为构造器( ...
- python3中的比较函数
在py2中,比较函数是cmp,而在py3,cmp已经不存在了,Py3启用了新的比较方法 原来在py2中,a>b就会调用a对象中的__cmp__函数,而现在a>b会调用a对象中的__lt__ ...
- MGR架构~MGR+proxysql(1)
一 简介:今天咱们来探讨下方案2的实现方式,同时也推荐方案2 二 环境部署 1 proxysql 环境 2 mgr 环境 三 进行配置 1 创建用户 1 添加监控用户并授权 ...
- mysql 案例~mysql主从复制延迟处理(2)
一 简介:今天来聊聊周期性从库延迟的问题,是上一篇的基础分析的一个场景 二 背景:近期每天的指定时间段,收到从库延迟的报警,然后过一段时间恢复.由于从库是提供读服务的,所以需要解决 三 分析思路: 1 ...
- python - 自定制property/property的延时计算
自定制prooerty: #模拟@property 实现将类的函数属性变成类属性: #定义描述符 class msf(): def __init__(self,obj): self.obj = obj ...
- shiroWeb项目-认证及MD5认证信息在页面显示(十)
realm设置完整认证信息 // realm的认证方法,从数据库查询用户信息 @Override protected AuthenticationInfo doGetAuthenticationInf ...
- ubuntu 安装lightgbm
前提:安装好git.cmake 1. 安装lightgbm git clone --recursive https://github.com/Microsoft/LightGBM 2. 编译 下载好的 ...