WEB开发网
开发学院软件开发C语言 [C# 4.0] 1. Dynamic 阅读

[C# 4.0] 1. Dynamic

 2010-09-30 21:04:24 来源:WEB开发网   
核心提示: 事情好像搞大发了,出来这么一大堆,[C# 4.0] 1. Dynamic(3),有点晕,编译器自动创建一个静态类持有一些静态字段,Binder 为这种封装提供了所需的绑定信息,为了便于分析,在第一次调用前创建 CallSite<T> 类型的数据,以后都是通过 CallSite<

事情好像搞大发了,出来这么一大堆,有点晕~~~~。编译器自动创建一个静态类持有一些静态字段,在第一次调用前创建 CallSite<T> 类型的数据,以后都是通过 CallSite<T>.Target 来完成 "动态调用"。可见 CallSite<T> 通过某种途径 "封装" 了动态调用过程。Binder 为这种封装提供了所需的绑定信息。

为了便于分析,我们用一个简单点的例子来完成对过程的跟踪。

class MyClass
{
  public void Test()
  {
    Console.WriteLine("Hello, World!");
  }
}
class Program
{
  static void Main(string[] args)
  {
    dynamic o = new MyClass();
    o.Test();
  }
}

反编译代码

[CompilerGenerated]
private static class SiteContainer0
{
  // Fields
  public static CallSite<Action<CallSite, object>> site1;
}
private static void Main(string[] args)
{
  object o = new MyClass();
  
  if (SiteContainer0.site1 == null)
  {
    SiteContainer0.site1 = CallSite<Action<CallSite, object>>.Create
    (
      Binder.InvokeMember
      (
        CSharpBinderFlags.ResultDiscarded, 
        "Test", 
        null, 
        typeof(Program), 
        new CSharpArgumentInfo[] 
        { 
          CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) 
        }
      )
    );
  }
  SiteContainer0.site1.Target(SiteContainer0.site1, o);
}

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Dynamic

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