ActionT 无参数委托详解
C#委托Action、Action<T>、Func<T>、Predicate<T>
CLR环境中给我们内置了几个常用委托Action、 Action<T>、Func<T>、Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范。
一、Action
Action封装的方法没有参数也没有返回值,声明原型为:
1 public delegate void Action();
用法如下:
1 public void Alert() 2 { 3 Console.WriteLine("这是一个警告"); 4 } 5 6 Action t = new Action(Alert); // 实例化一个Action委托 7 t();
如果委托的方法里的语句比较简短,也可以用Lambd表达式直接把方法定义在委托中,如下:
1 Action t = () => { Console.WriteLine("这是一个警告"); }; 2 t();
二、Action<T>
Action<T>是Action的泛型实现,也是没有返回值,但可以传入最多16个参数,两个参数的声明原型为:
1 public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2);
用法如下:
1 private void ShowResult(int a, int b) 2 { 3 Console.WriteLine(a + b); 4 } 5 6 Action<int, int> t = new Action<int, int>(ShowResult);//两个参数但没返回值的委托 7 t(2, 3);
同样也可以直接用Lambd表达式直接把方法定义在委托中,代码如下:
1 Action<int, int> t = (a,b) => { Console.WriteLine(a + b); }; 2 t(2, 3);
三、Func<T>
Func<T>委托始终都会有返回值,返回值的类型是参数中最后一个,可以传入一个参数,也可以最多传入16个参数,但可以传入最多16个参数,两个参数一个返回值的声明原型为:
1 public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
用法如下:
1 public bool Compare(int a, int b) 2 { 3 return a > b; 4 } 5 6 Func<int, int, bool> t = new Func<int, int, bool>(Compare);//传入两个int参数,返回bool值 7 bool result = t(2, 3);
同样也可以直接用Lambd表达式直接把方法定义在委托中,代码如下:
1 Func<int, int, bool> t = (a, b) => { return a > b; }; 2 bool result = t(2, 3);
四 、Predicate<T>
Predicate<T>委托表示定义一组条件并确定指定对象是否符合这些条件的方法,返回值始终为bool类型,声明原型为:
1 public delegate bool Predicate<in T>(T obj);
用法如下:
1 public bool Match(int val) 2 { 3 return val > 60; 4 } 5 6 Predicate<int> t = new Predicate<int>(Match); //定义一个比较委托 7 int[] arr = { 13, 45, 26, 98, 3, 56, 72, 24 }; 8 int first = Array.Find(arr, t); //找到数组中大于60的第一个元素
同样也可以直接用Lambd表达式直接把方法定义在委托中,代码如下:
1 Predicate<int> t = val => { return val > 60;}; //定义一个比较委托 2 int[] arr = { 13, 45, 26, 98, 3, 56, 72, 24 }; 3 int first = Array.Find(arr, t); //找到数组中大于60的第一个元素
总结:
- 如果要委托的方法没有参数也没有返回值就想到Action
- 有参数但没有返回值就想到Action<T>
- 无参数有返回值、有参数且有返回值就想到Func<T>
- 有bool类型的返回值,多用在比较器的方法,要委托这个方法就想到用Predicate<T>
ActionT 无参数委托详解相关推荐
- 基础拾遗------委托详解
基础拾遗: 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗---- ...
- 第 19 节 委托详解
第19节 委托详解(还不怎么理解) 什么是委托 委托的声明(自定义委托) 委托的一般使用 委托的高级使用 什么是委托 委托(delegate)是函数指针的"升级版" 实例:C/C+ ...
- Python必备基本技能——命令行参数args详解
Python必备基本技能--命令行参数args详解 1. 效果图 2. 源码 2.1 简单命令行参数 2.1 轮廓检测源代码 参考 这篇博客将介绍一项开发人员.工程师和计算机科学家必备的技能--命令行 ...
- ajax 页面无刷新,Ajax的页面无刷新实现详解(附代码)
这次给大家带来Ajax的页面无刷新实现详解(附代码),Ajax页面无刷新实现的注意事项有哪些,下面就是实战案例,一起来看一下. ajax (ajax开发) AJAX即"Asynchronou ...
- 线程池的创建及参数设置详解
一. 常见线程池 线程池的创建方法主要有两类,第一是通过Executors 创建线程池,第二是通过 ThreadPoolExecutor 创建线程池. 首先我们来看通过Executors 创建的线程池 ...
- 【深入理解Hadoop原理】Hadoop 参数配置 详解
Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传 ...
- ANSYS Workbench接触设置面板各参数含义详解
ANSYS Workbench接触设置面板各参数含义详解 Ansys Workbench的接触设置面板由接触范围设置(Scope),基本参数定义(Definition),高级选项(Advance ...
- JavaScript(js)事件冒泡、事件捕获、事件委托详解
JavaScript(js)事件冒泡.事件捕获.事件委托详解 1.什么是事件 JavaScript和HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口发生的一些特定的交互瞬间.可以使用监听 ...
- 转速环PI参数整定详解(一)——电机传递函数的来源
记得很久以前写过一篇转速环PI参数整定的文章,但是实际效果却不太好,为此对这个遗留已久的问题,今天在这篇文章内详细阐述转速环参数的设计过程.由于也很长时间没有再碰自动控制原理这一块,因此文章将会附带回 ...
最新文章
- SCCM2016 集成WSUS提供补丁服务(一)
- LeetCode Insert Delete GetRandom O(1) - Duplicates allowed
- MySQL大表优化技术要点科普
- 机器学习中的参数调整
- SAP CRM的数据库表CRMD_PRICING
- 决策树有框架吗_决策框架
- python爬虫进阶教程:百万英雄答题辅助系统
- 应届生怒怼管理层后续:已离职、被标记永不录用?腾讯张军回应...
- 安装Windows 10 V1909对CPU有什么要求?
- openSSH服务及其应用
- php怎么实现ubb代码,php实现过滤UBB代码的类
- 计算机毕业设计ssm飞机售票管理系统63z52系统+程序+源码+lw+远程部署
- word新建文档默认文件名_如何更改保存Word文档时使用的默认文件名
- Linux学习总结(60)——Linux系统常用命令速查手册
- 常用的计算机优化软件有哪些,计算机常用的硬件和软件优化软件和优化方法有哪些,如何提高WindowsXP系统的运行速度和稳定性...
- Mybatis中mapper.xml中like模糊查询字符串,日期写法
- Freefilesync自动同步
- kotlin 原生字符串输出三个引号
- DailyFi - 9.15|PrimeDAO 完成 200万美元种子轮融资,Paradigm 研究员发布新 NFT 碎片化产品...
- XDOJ.172 构造表达式
热门文章
- getsize java_Java ZipEntry getSize()用法及代码示例
- dsp 数据类型强制转换_JavaSE第二章总结—数据类型
- 星空主题设计理念_敏捷协调,智慧运营:金蝶云·星空的产品设计理念与应用实践...
- 10G_Ethernet_02 10G Ethernet Subsystem 简介
- python中的正则表达式是干嘛的_操作python中的正则表达式(上)
- python聚类的结果显示_使用Python进行聚类
- python 解码gbk_Python3的url编码和解码,自定义gbk、utf-8的例子
- ansible图形化界面开源_MySQL常见的图形化工具
- VHDL汽车尾灯控制器的设计
- android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...