来源:京华在线网 | 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。
2023-03-28 09:56:07
2023-03-28 09:39:18
2023-03-28 09:46:20
2023-03-28 09:57:05
2023-03-28 08:37:13
2023-03-27 17:39:46
2023-03-27 17:38:41
2023-03-27 17:37:12
2023-03-27 17:36:53
2023-03-27 17:36:16
2023-03-27 17:34:58
2023-03-27 17:29:28
2023-03-27 17:28:37
2023-03-27 17:28:31
2023-03-27 17:25:09
2023-03-27 17:24:24
2023-03-27 17:22:49
2023-03-27 16:59:06
2023-03-27 16:57:02
2023-03-27 16:53:10
2023-03-27 16:52:14