WEB开发网
开发学院软件开发C语言 委托揭秘 阅读

委托揭秘

 2009-06-10 08:32:08 来源:WEB开发网   
核心提示: aMyDelegate(); 将生成一下代码,好像源代码本来就是这么写的一样:aMyDelegate.Invoke(); 为了验证编译器生成代码来调用委托的 Invoke 方法,委托揭秘(5),我们可以用 ILDasm.exe 来检查为voidMethod(MyDelegateaMyD

aMyDelegate();

  将生成一下代码,好像源代码本来就是这么写的一样:

aMyDelegate.Invoke();

  为了验证编译器生成代码来调用委托的 Invoke 方法,我们可以用 ILDasm.exe 来检查为 void Method(MyDelegate aMyDelegate) 方法创建的IL代码。图1-2 展示了 void Method(MyDelegate aMyDelegate) 方法的中间语言(intermediate language,IL)代码。

委托揭秘

图片看不清楚?请点击这里查看原图(大图)。

图1-2 ILDasm.exe 证明编译器生成了对 MyDelegate 委托类型的 Invoke 方法的调用 

 事实上,我们可以修改 void Method(MyDelegate aMyDelegate) 方法来显示调用 Invoke,如下所以:

   private void Method(MyDelegate aMyDelegate)
   {
       if (aMyDelegate != null)
       {
           aMyDelegate.Invoke();
       }
   }

 我们还记得编译器在定义 MyDelegate 类的时候定义 Invoke 的。所以在调用 Invoke 的时候,它使用的是 private _target 和 _methodPtr 字段来对指定对象调用所需的方法。注意,Invoke 方法的签名匹配委托的签名,因为 MyDelegate 委托是一个无参数并返回类型为 void,Invoke 方法(如编译器生成的那样)也是一个无参数并返回 void。

End.

上一页  1 2 3 4 5 

Tags:委托 揭秘

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接