Net Framework中的提供的常用委托类型
.Net Framework中的提供的常用委托类型
.Net Framework中提供有一些常用的预定义委托:Action、Func、Predicate。用到委托的时候建议尽量使用这些委托类型,而不是在代码中定义更多的委托类型。这样既可以减少系统中的类型数目,又可以简化代码。这些委托类型应该可以满足大部分需求。
Action
没有返回值的委托类型。.Net Framework提供了17个Action委托,从无参数一直到最多16个参数。
定义如下:
1 public delegate void Action();
2 public delegate void Action<in T>(T obj);
3 public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);
.
.
.
用法:
无参数:
public void ActionWithoutParam()
{
Console.WriteLine("this is an Action delegate");
}
Action oneAction = new Action(ActionWithoutParam);
有参数:
Action<int> printRoot = delegate(int number)
{
Console.WriteLine(Math.Sqrt(number));
};
Func
有一个返回值的委托。.Net Framework提供了17个Func委托,从无参数一直到最多16个参数。
定义如下:
public delegate TResult Func<out TResult>();
public delegate TResult Func<in T, out TResult>(T arg);
.
.
.
用法:
public bool Compare(int x, int y)
{
return x > y;
} Func<int, int, bool> f = new Func<int, int, bool>(Compare);
bool result = f(100, 300);
Predicate
等同于Func<T, bool>。表示定义一组条件并确定指定对象是否符合这些条件的方法。
定义如下:
public delegate bool Predicate<in T>(T obj);
用法:
public bool isEven(int a)
{
return a % 2 == 0;
} Predicate<int> t = new Predicate<int>(isEven);
其他
除了上述的三种常用类型之外,还有Comparison<T>和Coverter<T>。
public delegate int Comparison<in T>(T x, T y); public delegate TOutput Converter<in TInput, out TOutput>(TInput input);
总结
- Action:没有参数没有返回值
- Action<T>:有参数没有返回值
- Func<T>: 有返回值
- Predicate<T>:有一个bool类型的返回值,多用在比较的方法中
以上。
Net Framework中的提供的常用委托类型的更多相关文章
- C++中string转化为常用数值类型
//模板类 用于将string类型转化为 常用数值类型 template <class Type> Type stringToNum(const string& str) { is ...
- .Net Framework中的标准委托和事件_1
.Net Framework中的标准委托,已经定义在命名空间System中, namespace System { public delegate void EventHandler(object s ...
- CLR环境中内置了几个常用委托(转)
CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...
- 转-Spring Framework中的AOP之around通知
Spring Framework中的AOP之around通知 http://blog.csdn.net/xiaoliang_xie/article/details/7049183 标签: spring ...
- .NET Framework 中的字符编码
字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配 ...
- .Net 中读写Oracle数据库常用两种方式
.net中连接Oracle 的两种方式:OracleClient,OleDb转载 2015年04月24日 00:00:24 10820.Net 中读写Oracle数据库常用两种方式:OracleCli ...
- 关于Rest Framework中View、APIView与GenericAPIView的对比分析
关于Rest Framework中View.APIView与GenericAPIView的对比分析 https://blog.csdn.net/odyssues_lee/article/detail ...
- DRF (Django REST framework) 中的Request 与 Response
DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ...
- .net Framework 中的四种计时器
在Framework中存在着4种定时器:其中分为两类, 多线程计时器 1:System.Threading.Timer 2:System.Timers.Timer 特殊目的的单线程计时器: 1:Sys ...
随机推荐
- LINQ之路(1):LINQ基础
本文将从什么是LINQ(What).为什么使用LINQ(Why)以及如何使用LINQ(How)三个方面来进行说明. 1.什么是LINQ LINQ(Language Integrated Query)是 ...
- java这些东西发展(1)-------大约ORA00604和ORA12705
******************************有关myEclipse和oracle在连接发生的一个问题********************************* 用户界面显示的评 ...
- python2编码总结(转)
以下依次列出python2常遇到的几个问题及讲解. # -*- coding:utf-8 -*- python2默认以ASCII编码,但是在实际编码过程中,我们会用到很多中文,为了不使包含中文的程序报 ...
- RestServer 1.1发布
具体配置方法参照第一版:http://www.cnblogs.com/devgis/p/4947191.html BUG反馈 QQ:80163278 邮箱:devgis@qq.com 淘宝:http: ...
- java实现生产者消费者问题(转)
引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况: 生产者消费者图 ...
- 大约sql声明优化
最近做的mysql数据库优化,并sql声明优化指南.我写了一个小文件.这种互相鼓励有关! 数据库参数获得的性能优化升级都在一起只占数据库应用系统的性能改进40%左右.其余60%的系统性能提升所有来自相 ...
- WIN8 、WIN7 下IIS7.5、IIS8 的rewrite 伪静态功能设置方法
原文 WIN8 .WIN7 下IIS7.5.IIS8 的rewrite 伪静态功能设置方法 win7和win8系统都自带有iis的功能.关于IIS的安装,上一篇已经讲述,这里就不重复了. 下面说下在w ...
- log4j的配置信息(转)
首先,在项目中的classes 中新建立一个log4j.properties文件即可: 在实际编程时,要使Log4j真正在系统中运行事先还要对配置文件进行定义.定义步骤就是对Logger.Append ...
- android在单身的对象和一些数据的问题被释放
正式接触android我们一直在开发了一段时间,该项目的第一个版本最终会很快结束. 当有它自己的测试.拥有android后台.同一时候打开了几个应用之后又一次切回到自己的app.发现报错了.经过排查, ...
- 我学的是设计模式的视频教程——装饰图案,装饰图案VS代理模式
课程视频 装饰模式 装饰模式VS代理模式1 装饰模式VS代理模式2 课程笔记 课程笔记 课程代码 课程代码 新课程火热报名中 课程介绍 版权声明:本文博主原创文章,博客,未经同意不得转载.