C#-委托
时间:2018-12-05
本文章向大家介绍C#-委托,主要包括C#-委托相关应用实例、知识点总结和注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、委托是什么?
委托一般可以看作是持有一个或多个方法的对象。可以把委托看做是对象,其和我们使用一个对象的过程一样。
声明->创建委托对象->给委托赋值->调用委托。
关于委托还有另一种理解,我们可以把委托类比为C/C++中的函数指针这一概念。只是委托是类型安全的。函数指针就是
指向函数入口地址的一个地址变量。我们可以随便更改指针指向的地址,以达到对不同函数的调用。同样我们可以更改委托的赋值
方法可以执行不同的方法。
函数指针特别适合用于回调函数,可以在函数执行时再判断函数指针指向的函数。委托也可以在执行的时候再决定指向哪一个方法。
使用委托的实例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DelegateDemo { delegate void MyDel(int value); class Program { void PrintLow(int value) { Console.WriteLine("The low value is {0}", value); } void PrintHigh(int value) { Console.WriteLine("The high value is {0}", value); } static void Main(string[] args) { Program program = new Program(); //MyDel del; Action <int> del = null; Random random = new Random(); int randomValue = random.Next(99); if (randomValue < 50) { //del = delegate (int x) // { // Console.WriteLine("Low value{0}", x); // }; del =(int x)=> { Console.WriteLine("Low value:{0}", x); }; //del = x => { }; //匿名方法+Lambda表达式 } else { del = delegate (int x) { Console.WriteLine("High value{0}", x); }; } del(randomValue); Console.ReadKey(); } } }
二、泛型委托
CLR环境中给我们内置了几个常用委托Action、 Action<T>、Func<T>、Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个委托了,
就用系统内置的这几个已经能够满足大部分的需求,且让代码符合规范。
例如上面代码的两种定义:public delegate void MyDel(int x) ; //自己定义的一种委托类型,返回值为void,一个int类型参数,
其实系统已经帮我们定义了。我们完全可以采用 Action <T> 泛型来定义: Action <int> del = null 。
其余也类似,关于返回值。
三、匿名方法
上面的代码既有关于匿名方法的介绍也有Lambda表达式的一般使用方式。
MyDel del = delegate (int x){ Console.WriteLine(""); };
MyDel del = x => x + 1 ;
- 编写地道的Go代码
- 开发你不能忽略的问题?JavaScript(JS)
- 厚土Go学习笔记 | 36. web服务指定路径下的get参数接收与处理
- 用R进行文本分析初探——包含导入词库和和导入李白语句
- Golang事务模型
- 厚土Go学习笔记 | 35. web服务器实现动态路径
- 过滤器Filter精华知识点,怎能不看
- JavaMail开发示例,学习要看对资料
- 厚土Go学习笔记 | 34. 一个简单的 web 服务器实现
- sqlplus / as sysdba无法登录的奇怪报错 (r8笔记第36天)
- JSP与EL表达式重点学习笔记(1)
- R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)
- JSP与EL表达式重点学习笔记(2)
- Node.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 数组属性和方法