C#中的代表和C ++中的fnc指针

时间:2012-05-26 12:19:00

标签: c# delegates

我正在努力让自己熟悉代表,并在http://msdn.microsoft.com/en-us/library/aa288459(v=vs.71).aspx,我正在阅读:

“与C或C ++中的函数指针不同,委托是面向对象的,类型安全的,安全的。”

一个意思是,我确实有C ++背景,有些看不懂如何理解那里的“不像”这个词。委托是什么意思是面向对象的,C ++ fnc指针不是?类型安全,安全相同。

任何人都可以展示一些例子和反例?

感谢。

1 个答案:

答案 0 :(得分:6)

委托比函数指针做的要多得多。它不仅存储函数地址,还存储对目标对象的引用。与C ++方法指针不同。因此,使用它来调用实例方法很简单。这照顾了“面向对象”的主张。

从那里开始有点下坡,但编译器确保类型安全,在分配代理时验证函数签名是否与委托类型完全匹配。这在C ++中没有什么不同,但没有办法摆脱不匹配。另一个可能的安全方面是委托对象持有的对象引用对垃圾收集器是可见的。因此,您永远不能在已删除的对象上调用实例方法。