C# 委托Delegate原理总结
-
类型安全:比如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.Combin
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
