博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#委托基础
阅读量:4574 次
发布时间:2019-06-08

本文共 983 字,大约阅读时间需要 3 分钟。

委托相当于指定一些代码在特定的时间执行,那时你已经无法更改要执行的代码,委托的实质是间接完成某种操作。

委托就是c#中的闭包(函数对象)啊。闭包就是一段代码加上所需的上下文,你可以理解为闭包用于储存一段代码逻辑。闭包这个概念是共性的,但是反映到具体的编程语言里,形态就五花八门了。比如java里的函数式接口(functional interface)就是闭包,c++的std::function也是闭包。

根据支持闭包的差异,可以将语言分为两种,一些语言中函数是第一等的,也就是说所有函数都是闭包,比如python和javascript,而另外一些语言,比如c#、java、c++,普通函数不是闭包,闭包用特定的类表示。

一. 简单委托的构成:

1.声明委托类型;

2.必须有一个方法包含了要执行的代码;

3.必须创建一个委托实例;(创建代码与该方法是否是静态方法有关)

4.必须调用(invoke)委托实例;

二 . 最终的垃圾:必须注意,假如委托实例本身不能被回收,委托实例会阻止它的目标被作为垃圾回收。这可能造成明显的内存泄漏,尤其是假如某短命的对象调用了一个长命的对象,并用它自身作为目标。长命对象间接容纳了短命对象的一个引用,延长了短命对象的寿命。

三. 委托是不易变的:创建了委托实例后,有关他的一切就不能改变。Delegate。Combine和String。Concat很像,都是合并现有的实例来形成一个新实例,同时根本不更改原始对象,注意,如果试图将null和委托实例合并到一起,null将被视为带有空调列表的一个委托。

四. 委托实例实际有一个操作列表与之关联,这称为委托实例的调用列表,System.Delegate类型的静态方法Combine和Remove负责创建新的委托实例。其中Combine负责将两个委托实例的调用列表连接到一起,而Remove负责从一个委托实例中删除另一个实例的调用列表。(+=,-=),调用委托实例时,它的所有操作都顺序执行,如果委托的签名具有一个非void的返回类型,则Invoke的返回值是最后一个操作的返回值。

五. 事件不是委托实例----只是成对的add/remove方法(类似于属性的取值/赋值方法)。

 

转载于:https://www.cnblogs.com/mcyushao/p/9546032.html

你可能感兴趣的文章
深入理解JavaScript原型链
查看>>
LinearGradient类来实现图片的渐变效果
查看>>
Golang关键字—— if/else
查看>>
数据清洗
查看>>
PHP&MySQL(三)——数组
查看>>
各种语法解释及用法
查看>>
UVA 1388 Graveyard
查看>>
Eclipse使用技巧
查看>>
网络请求之get与post异步请求
查看>>
堆和栈的区别
查看>>
清理内存
查看>>
蓝桥杯之装箱问题
查看>>
Spark常用算子详解
查看>>
JAVA_桥接模式
查看>>
C语言 strcpy,memcpy,memmove,memccpy函数
查看>>
C语言一个小程序的bug疑问 数组相关[已解决]
查看>>
几种排序算法(PHP版)
查看>>
数据库字段数据类型对索引的影响
查看>>
perl6的介绍与下载编译安装
查看>>
mesos cluster
查看>>