什么是c委托?委托的本质是什么?

来源:京华在线网 | 2023-03-28 10:41:47 |

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展。对学过C/C++的人,是不是觉得跟函数指针很像呢!委托可以引用实例和静态(在Visual Basic中为 Shared)方法,而函数指针只能引用静态方法。 其实它们是有区别的,在非托管C/C++中,函数的地址就是一个内存地址。该地址不会携带任何额外的信息,例如函数期望的参数个数、参数类型、函数的返回值类型及函数的调用约定。总之,非托管C/C++中函数指针是非类型安全的。而.NET中的委托是类型安全的,委托会检测它所保存的函数引用是否和声明的委托匹配。

委托的本质是什么?

在C#中使用delegate关键字定义委托,然后使用我们熟悉的函数调用的语法来调用委托,如上述例子中的cb(“skynet”,23)。在这简单的表象背后,.NET编译器为我们做了什么呢?可以知道定义CallBack委托时,编译器为我们做了如下工作,实际上定义任何委托编译器都会做如下工作:

声明一个类,对应例子中的.class nested public auto ansi sealed。该类扩展自System.MulticastDelegate,对应例子中的extends [mscorlib]System.MulticastDelegate。该类包含一个构造器,对应例子中的.ctor:void(object ,native int)。该类包含三个方法,分别是BeginInvoke、EndInvoke、Invoke。


备案号:粤ICP备18023326号-41 联系网站:85 572 98@qq.com