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

以上。

 
分类: 学习笔记

最新文章

  1. 【从零开始学BPM,Day1】工作流管理平台架构学习
  2. 利用Simple-RTMP-Server(SRS)来进行直播
  3. 【WP8.1开发】认识后台任务
  4. Yii2的深入学习--别名(Aliases)
  5. windows系统激活-使用微软官方公布的kms client setup key安装或安装后使用slmgr导入
  6. c语言运算符号的优先级
  7. JAVA 数组作业——动手动脑以及课后实验性问题
  8. iPhone Tableview分批显示数据
  9. 2017年开年的第一次比较大的安全事件: MongoDB “赎金事件”,如何看待互联网安全问题
  10. Java Arrays 源码 笔记
  11. http post/get 2种使用方式
  12. Ruby方法参数默认值的一个小技巧在Rails中的应用
  13. [C#] 動的にアセンブリをロードする
  14. blfs(systemv版本)学习笔记-编译安装i3-wm平铺式窗口管理器
  15. laravel安装Excel安装不上
  16. VxWorks笔记
  17. MySQL创建只读账号
  18. ElasticSearch查询 第一篇:搜索API
  19. webshell扫描
  20. element-ui 点击行如何获取table的行索引

热门文章

  1. Oracle左连接、右连接、全外连接以及(+)号用法(转)
  2. HTML5 获得canvas油漆环境
  3. .NET反编译之Reflector
  4. mysql 修改[取消]timestamp的自动更新
  5. HDU - 5008 Boring String Problem (后缀数组+二分法+RMQ)
  6. Kinect SDK C++ - 2. Kinect Depth Data
  7. hdu Write a simple HTML Browser
  8. xml:Invalid byte 2 of 2-byte UTF-8 sequence
  9. hdu1107武术(模拟题)
  10. crawler_工具类_RegexUtils_正则帮助类