.NET 委托(Delegate、Action、Func)
时间:2019-06-15
本文章向大家介绍.NET 委托(Delegate、Action、Func),主要包括.NET 委托(Delegate、Action、Func)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Delegate
protected delegate int ClassDelegate(int x, int y);//定义委托类型及参数 static void Main(string[] args) { ClassDelegate dele = new ClassDelegate(Add);//实例化一个委托 Console.WriteLine(dele(1, 2));//调用委托 Console.ReadKey(); } static int Add(int a, int b) { return a + b; }
Action,可以传入参数,没有返回值的委托
方法1,调用方法
static void Main(string[] args) { Action<int, int> ac = new Action<int, int>(ShowAddResult);//实例化一个委托 ac(1, 2);//调用委托 Console.ReadKey(); } static void ShowAddResult(int a, int b) { Console.WriteLine(a + b); }
方法2,使用lambda表达式
static void Main(string[] args) { Action<int, int> ac = ((p, q) => Console.WriteLine(p + q));//实例化一个委托 ac(1, 2);//调用委托 Console.ReadKey(); }
方法3,作为参数传
static void Main(string[] args) { Action<string> ac = (p => Console.WriteLine("我是方法1,传入值:"+p));//实例化一个委托 Action<string> ac2 = (p => Console.WriteLine("我是方法2,传入值:" + p));//实例化另一个委托 Test(ac, "参数1");//调用test方法,传入委托参数 Test(ac2, "参数1");//调用test方法,传入委托参数 Console.ReadKey(); } static void Test<T>(Action<T> ac, T inputParam) { ac(inputParam); }
Func,可以传入参数,必须有返回值的委托
方法1,调用方法
static void Main(string[] args) { Func<string> fc1 = new Func<string>(ShowAddResult);//实例化一个委托 string result = fc1();//调用委托 Console.WriteLine(result); Console.ReadKey(); } static string ShowAddResult() { return "地球是圆的"; }
方法2,使用lambda表达式
static void Main(string[] args) { //实例化一个委托,注意不加大括号,写的值就是返回值,不能带return Func<string> fc1 = () => "地球是圆的"; //实例化另一个委托,注意加大括号后可以写多行代码,但是必须带return Func<string> fc2 = () => { return "地球是圆的"; }; string result = fc1();//调用委托 string result2 = fc2();//调用委托 Console.WriteLine(result); Console.WriteLine(result2); Console.ReadKey(); }
方法3,作为参数传
static void Main(string[] args) { //实例化一个委托,注意不加大括号,写的值就是返回值,不能带return Func<int, string> fc1 = (p) => "传入参数" + p + ",地球是圆的"; //实例化另一个委托,注意加大括号后可以写多行代码,但是必须带return Func<string, string> fc2 = (p) => { return "传入参数" + p + ",地球是圆的"; }; string result = Test<int>(fc1, 1);//调用委托 string result2 = Test<string>(fc2, "1");//调用委托 Console.WriteLine(result); Console.WriteLine(result2); Console.ReadKey(); } static string Test<T>(Func<T, string> fc, T inputParam) { return fc(inputParam); }
总结:
Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型
Func可以接受0个至16个传入参数,必须具有返回值
Action可以接受0个至16个传入参数,无返回值
原文地址:https://www.cnblogs.com/lqyy/p/11028558.html
- Struts2 S2-052 RCE简单测试
- javaScript实现归并排序
- js粘贴事件paste简单解析及遇到的坑
- 学习zepto.js(对象方法)[6]
- Javascript 装饰器极速指南
- daterangepicker日历插件使用参数注意问题
- 学习zepto.js(对象方法)[5]
- js 停止事件冒泡 阻止浏览器的默认行为
- vue-cli生成的项目配置开发和生产环境不同的接口
- 【52ABP实战教程】0.1-- Devops如何用VSTS持续集成到Github仓库!
- 学习zepto.js(对象方法)[4]
- 事件绑定的几种常见方式
- vue的iview列表table render函数设置DOM属性值的方法
- js焦点轮播图
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP关键字this指向当前对象指针
- 一起来学matlab-matlab学习笔记8 基本绘图命令_4 LineSpec线条设定
- PHP中的static静态变量的使用方法详解
- 一起来学matlab-matlab学习笔记8 基本绘图命令_6 三维绘图
- 一起来学matlab-matlab学习笔记8 基本绘图命令_5 初级二维绘图/交互式绘图
- PHP实现页面跳转的几种方法
- 一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色
- 一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象
- PHP 如何阻止用户上传成人照片或者裸照
- 一起来学matlab-字符串操作 10_4 MATLAB中的字符串表示
- 一起来学演化计算-matlab优化函数fminunc
- 一起来学matlab-matlab学习笔记10 10_1一般运算符
- 每日手撕一道算法题-20. 有效的括号
- 一起来学matlab-数组取值 MATLAB中的字符串符号
- 递归解决遍历问题