C#中的委托是什么?事件是不是一种委托?

2020-07-07 09:41发布

8条回答

委托是一种新的数据类型,可以指代一个方法。方法与委托所定义的方法签名有关。他类似C++的函数指针。定义事件需要委托,定义事件的委托没有返回值,委托可以在然后可以调用的地方调用。而事件只能在事件定义内部调用外面只能绑定。典型的委托应用定义缓存的时候,做多线程的时候。

Ross
3楼-- · 2020-07-08 09:03

C#中的委托是一种引用数据类型,该类型的对象所赋的值必须是方法名,但前提有一点,方法的参数和返回值要和委托对象的参数和返回值一样,委托类似于C语言中的函数指针,都指向方法所在的内存,使用委托对象其实就是使用的对象所指向的方法.事件也是一种委托,它是委托对象在类里面的一种封装形式,使用事件时不能够直接使用=符号,只能使用+=符号进行赋值,另外委托只能在方法里面调用.

小狮子
4楼-- · 2020-07-08 09:13

委托是CTS(公共类型系统)规定的5种类型之一(类类型、结构类型、接口类型、枚举类型、委托类型)。通俗的说,委托是这样一种类型:这种类型的实例,指向其它类型的方法。委托主要就是提供间接调用、构建双向系统用的,他为消息模型和多线编程提供了基础。再说说事件,事件并不是一种类型,它是一个方法,它是为了简化委托的注册而出现的。

蜗牛
5楼-- · 2020-07-08 09:15

委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就 没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,可说说事件是对委托的一种封装

C#中的委托是一种引用数据类型,该类型的对象所赋的值必须是方法名,但前提有一点,方法的参数和返回值要和委托对象的参数和返回值一样,委托类似于C语言中的函数指针。

事件和委托是不同的,事件的内部是用委托实现的,可以说事件是对委托的一种封装。

Mantra
7楼-- · 2020-07-08 15:21

委托可以理解为指向方法或者函数的指针,或者说叫方法或者函数类型。

事件是对委托的又一次封装,可以理解为是特殊的委托。

老杜
8楼-- · 2020-07-09 15:32

委托可以理解成一中类型,不过封装的是方法,把方法参数化,达到解耦的目的

Transform
9楼-- · 2020-07-14 16:44

委托的本质,是一个类。

事件,是一个委托类型的私有变量加上两个公有方法(事件的+=和-=),这是本质区别。