-
类型安全:比如c#的委托就是类型安全的,为什么呢?C/C++非成员函数的地址本质就是一个内存地址,这个地址不携带任何额外信息,比如函数收到的参数个数、参数类型、函数返回类型、函数的调用协定。任何调用方式都可以很轻易的调用函数,从而在编译层面不报错,而运行中出错。这就是类型不安全的。
-
C#编译器和CLR对委托所做的额外隐藏工作
-
委托本质是定义了一个类:
internal Class Feedback : MulticastDelegate { //注意,这里自动生成的Invoke函数签名会与委托定义时候的签名一致。 public virture Invoke(Int x); .... } -
所以,public delegate void FeedBack (int x);的定义位置和其他类型的位置是一样的。
-
-
委托类型的调用方式:Fb() => Fb.Invoke(),编译器在编译的时候会自动转换。
-
这个调用方式并不是反射,效率很高。
-
这个使用的前提是,开发者知道回调方法的原型。
-
-
Delegate.DynamicInvoke(),采用的是反射,效率较低。
-
委托链:C = Delegate.Combine(A,B)方法中:
-
Combine会先额外创建一个委托对象,并初始化_target,_methodPtr和_invocationList;(_target,_methodP
-
C# 委托Delegate原理总结
最新推荐文章于 2025-10-31 14:24:43 发布

最低0.47元/天 解锁文章
128

被折叠的 条评论
为什么被折叠?



