事实上,通过使用ILDasm.exe程序检查ProcessItems代码结果(如图五),你能发现这一点。 图五 分解后的 Set类的 ProcessItems 图五显示了用于Set类型中ProcessItems方法的微软中介语言。其中红色的箭头指向的指令调用Set.Feedback的Invoke方法。如果你修改源代码来显式调用Invoke方法,C#编译器报错,出错信息为:“error CS1533: Invoke cannot be called directly on a delegate”——意思是Invoke不能针对某个委派被直接调用。C#不允许你显式调用Invoke(但是,但别的编译器可以)。 你会想起当编译器定义Feedback类的时候,它也定义了Invoke方法。当Invoke被调用时,它使用私有的_target和_methodPtr域来为特定对象调用希望的方法。注意Invoke方法的签名与委派的签名要完全匹配。也就是说,Feedback委派带三个参数并返回void,那么Invoke方法也必须带三个相同的参数并返回void。 结论 本文讨论了有关委派的基本概念。根据本文目前所讨论的内容,现在你应该能够创建并使用它们。在后继文章中,我将解释链表中的委派链,以及一些有关MulticastDelegate的附加方法,System.Delegate类型和事件等......。等着我的好消息吧。 |
正在阅读:介绍.NET中的委派(Delegates)之三介绍.NET中的委派(Delegates)之三
2004-02-14 09:34
出处:
责任编辑:pjl
键盘也能翻页,试试“← →”键