.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类型的返回值,多用在比较的方法中

以上。

时间: 2024-08-30 12:45:53

.Net Framework中的提供的常用委托类型的相关文章

C++中string转化为常用数值类型

//模板类 用于将string类型转化为 常用数值类型 template <class Type> Type stringToNum(const string& str) { istringstream iss(str); Type num; iss >> num; return num; }int main(int argc, char* argv[]){ string str; cin >> str; stringToNum<float>(str

CLR环境中内置了几个常用委托(转)

CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范.一.Action Action封装的方法没有参数也没有返回值,声明原型为: 1 public delegate void Action(); 用法如下: public void Alert() { Console.WriteLine(&q

.NET Framework 中的字符编码

字符是可用多种不同方式表示的抽象实体. 字符编码是一种为受支持字符集中的每个字符进行配对的系统,配对时使用的是表示该字符的某些值. 例如,摩尔斯电码是一种为罗马字母表中的每个字符进行配对的字符编码,配对时使用的是适合在电报线路中传输的点和线模式. 计算机的字符编码将所支持字符集中的每个字符与代表该字符的数值进行配对.字符编码具有两个不同的组件: 编码器,将字符序列转换为数值序列(字节). 解码器,将字节序列转换为字符序列. 字符编码描述了编码器和解码器的操作规则. 例如,UTF8Encoding

转-Spring Framework中的AOP之around通知

Spring Framework中的AOP之around通知 http://blog.csdn.net/xiaoliang_xie/article/details/7049183 标签: springaop设计模式beanintegerclass 2011-12-07 11:39 6108人阅读 评论(0) 收藏 举报 在第一部分,您看到了如何使用Spring AOP来实现跟踪和记录方面.跟踪和记录都是"消极"方面,因为它们的出现并不会对应用程序的其他行为产生影响.它们都使用了消极的b

.net Framework 中的四种计时器

在Framework中存在着4种定时器:其中分为两类, 多线程计时器 1:System.Threading.Timer 2:System.Timers.Timer 特殊目的的单线程计时器: 1:System.Windows.Forms.Timer(Windows Forms Timer) 2:System.Windows.Threading.DispatcherTimer(WPF timer); 多线程计时器比较强大,精确,而且可扩展性强: 单线程计时器比较安全,对于更新 Windows For

.NET FrameWork 中的 CTS

CTS:Common Type System 通用类型系统. 1.不仅可以把C#编译成.Net IL,还支持Basic.Python.Ruby等语言,甚至还支持Java.不同语言中的数据类型定义是不一样的,.Net中定义了通用的数据类型(CTS,Common Type System):String.Int16.Int32.Int64.Boolean.Double.通过转到定义可以看到这些都是类(结构体). 2. Int64→long.Int32→int.Int16→short.String→st

[JavaEE - JPA] 3. Spring Framework中的事务管理

前文讨论了事务划分(Transaction Demarcation)在EJB中是如何实现的,本文继续介绍在Spring Framework中是如何完成事务划分的. 我们已经知道了当采用Container事务类型的时候,事务划分主要有以下两种方案(参考这里): 使用JTA接口在应用中编码完成显式划分 在容器的帮助下完成自动划分 在使用JavaEE的EJB规范时,这两种方案分别被实现为BMT以及CMT,关于BMT和CMT在上一篇文章中有比较详尽的讨论(参考这里). 那么对于Spring Framew

Redis中的数据结构与常用命令

开发系统:Ubuntu 17.04Redis驱动:StackExchange.Redis 1.2.3Redis版本:3.2.1开发平台:.NET Core 对于Redis的介绍这里只写一句:Redis是一种基于内存的高性能非关系型数据库,它以kye-value的形式来存储数据. 5种数据结构 Redis中包含5种数据类型:STRING.LIST.SET.HASH.ZSET. Redis中的5中数据结构(截图出自<Redis in Action>): Redis以key-value形式存储数据,

SQL 禁止在 .NET Framework 中执行用户代码。启用 &quot;clr enabled&quot; 配置选项

注:本文摘自:http://blog.csdn.net/heshengfen123/article/details/3597125 在执行SQL脚本过程中如果出现 禁止在 .NET Framework 中执行用户代码.启用 "clr enabled" 配置选项的解决办法是: 执行以下脚本: exec sp_configure 'show advanced options', '1';goreconfigure;goexec sp_configure 'clr enabled', '1'