C# 委托Delegate原理总结

  1. 类型安全:比如c#的委托就是类型安全的,为什么呢?C/C++非成员函数的地址本质就是一个内存地址,这个地址不携带任何额外信息,比如函数收到的参数个数、参数类型、函数返回类型、函数的调用协定。任何调用方式都可以很轻易的调用函数,从而在编译层面不报错,而运行中出错。这就是类型不安全的。

  2. C#编译器和CLR对委托所做的额外隐藏工作

    1. 委托本质是定义了一个类:

      internal Class Feedback : MulticastDelegate{    //注意,这里自动生成的Invoke函数签名会与委托定义时候的签名一致。        public virture Invoke(Int x); ....}	
    2. 所以,public delegate void FeedBack (int x);的定义位置和其他类型的位置是一样的。

  3. 委托类型的调用方式:Fb() => Fb.Invoke(),编译器在编译的时候会自动转换。

    1. 这个调用方式并不是反射,效率很高。

    2. 这个使用的前提是,开发者知道回调方法的原型。

  4. Delegate.DynamicInvoke(),采用的是反射,效率较低。

  5. 委托链:C = Delegate.Combin


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部