首页 新闻 会员 周边 捐助

委托如何进行接地气的理解?

0
[已解决问题] 解决于 2017-12-13 12:01

曾经有个朋友在我面前吹嘘到:C#中,把一些事情交给委托去处理好了,你就不用管了。

说的神乎其神的,我不知道他这句话是吹牛B还是忽悠我,总感觉不是那么回事。

 

那么如何理解委托呢?要接地气,形象的回答,最好举例说明。

 

delegate, 真正的C#高手们,你们怎么看?我不想被别人忽悠。什么事交给委托,自己不用管了,这是欺负我不懂C#是吧。

绿绿山水的主页 绿绿山水 | 菜鸟二级 | 园豆:248
提问于:2017-12-13 10:52
< >
分享
最佳答案
1

底层实现层面,我不知道。

从使用角度来说:

  程序是一个预设的流程,程序写好后流程就定了。我们写个程序,大流程定下来了,比如执行1,2,3三个函数,但是我们在2中有些具体操作不想固定下来,我们想只是给个名称,在外面输入具体的实现。有些语言中可以使用闭包、有的可以使用函数作为参数传入,C#就使用delegate关键字,定义了个结构可以把一段操作作为参数传入。在语法上应该和类、接口这些概念一样。

奖励园豆:5
授之以渔 | 小虾三级 |园豆:1112 | 2017-12-13 11:17

 没错,所有的方法打包在一起,放在那里,我什么时候想要,什么时候拿来,我不想要也没关系,就利用委托打包一起,放在那里。

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 11:55

 为什么我要用委托,你说出来了,我就是不想被限制,对于一个被打包的方法而言,我想什么时候用,就什么时候用,这就是委托。

绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 12:00
其他回答(5)
1

C或C++ 中的函数指针,我好像之前写过一篇博文 C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日

BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-12-13 10:55

compare(5,4)和cd(1,2)的执行结果是不一样的,因为实参不一样,应该是compare(1,2)和cd(1,2)执行结果一样。

另外你代码中提到了方法compare,却没提到方法的具体内容。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 11:54
0

楼上所言差矣:

首先可以从字面去理解;

实际约等于   函数指针链,且是类型安全的(几乎低级语言容易出错的问题,高级语言都有安全检查)。

花飘水流兮 | 园豆:13617 (专家六级) | 2017-12-13 11:02

 字面上说的通,希望更具体,更深入一点。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 11:56
0

相对论如何接地气的理解,如何7天学会C#。

你朋友的意思是,你把写代码这件事情委托给他去处理,你就不用管了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2017-12-13 11:30

你的回答挺有意思的。

哈哈哈

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 11:40

 他这么给我说,他也做不了委托。实参传递的概念她还是不懂。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 11:57
1

有时候,我们想把一个【函数】传递到其他地方去, 跟传递一个数据一样,可以赋值,可以作为参数或返回值,可以作为变量,字段,属性,这时候使用【委托】来包裹这个函数。

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-13 11:48

 就是一个打包的概念。你说到点子上了。

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 11:58
0

委托就是方法的签名,委托可以作为方法的参数进行传递。

guwei4037 | 园豆:205 (菜鸟二级) | 2017-12-13 13:57

委托不能作为方法的参数,委托好比一个人,方法好比一个皮球,委托可以把方法当皮球一样踢

支持(0) 反对(0) 绿绿山水 | 园豆:248 (菜鸟二级) | 2017-12-13 21:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册