曾经有个朋友在我面前吹嘘到:C#中,把一些事情交给委托去处理好了,你就不用管了。
说的神乎其神的,我不知道他这句话是吹牛B还是忽悠我,总感觉不是那么回事。
那么如何理解委托呢?要接地气,形象的回答,最好举例说明。
delegate, 真正的C#高手们,你们怎么看?我不想被别人忽悠。什么事交给委托,自己不用管了,这是欺负我不懂C#是吧。
底层实现层面,我不知道。
从使用角度来说:
程序是一个预设的流程,程序写好后流程就定了。我们写个程序,大流程定下来了,比如执行1,2,3三个函数,但是我们在2中有些具体操作不想固定下来,我们想只是给个名称,在外面输入具体的实现。有些语言中可以使用闭包、有的可以使用函数作为参数传入,C#就使用delegate关键字,定义了个结构可以把一段操作作为参数传入。在语法上应该和类、接口这些概念一样。
没错,所有的方法打包在一起,放在那里,我什么时候想要,什么时候拿来,我不想要也没关系,就利用委托打包一起,放在那里。
为什么我要用委托,你说出来了,我就是不想被限制,对于一个被打包的方法而言,我想什么时候用,就什么时候用,这就是委托。
C或C++ 中的函数指针,我好像之前写过一篇博文 C#高级编程笔记 Delegate 的粗浅理解 2016年9月 13日
compare(5,4)和cd(1,2)的执行结果是不一样的,因为实参不一样,应该是compare(1,2)和cd(1,2)执行结果一样。
另外你代码中提到了方法compare,却没提到方法的具体内容。
楼上所言差矣:
首先可以从字面去理解;
实际约等于 函数指针链,且是类型安全的(几乎低级语言容易出错的问题,高级语言都有安全检查)。
字面上说的通,希望更具体,更深入一点。
相对论如何接地气的理解,如何7天学会C#。
你朋友的意思是,你把写代码这件事情委托给他去处理,你就不用管了。
你的回答挺有意思的。
哈哈哈
他这么给我说,他也做不了委托。实参传递的概念她还是不懂。
有时候,我们想把一个【函数】传递到其他地方去, 跟传递一个数据一样,可以赋值,可以作为参数或返回值,可以作为变量,字段,属性,这时候使用【委托】来包裹这个函数。
就是一个打包的概念。你说到点子上了。
委托就是方法的签名,委托可以作为方法的参数进行传递。
委托不能作为方法的参数,委托好比一个人,方法好比一个皮球,委托可以把方法当皮球一样踢