WEB开发网
开发学院软件开发C语言 C# 4.0、动态关键字与 COM 阅读

C# 4.0、动态关键字与 COM

 2010-09-30 22:44:44 来源:WEB开发网   
核心提示: 图 2 中的代码已经过编辑和简化以方便阅读,但它显示了实际情况的要点,C# 4.0、动态关键字与 COM(4),动态变量映射到 System.Object 实例,然后就会在 DLR 中为程序创建一个站点,并且该成员能够接受类似于变量 x 中目前存储的对象这样的参数,如果有任何问题,该站点负责管理

图 2 中的代码已经过编辑和简化以方便阅读,但它显示了实际情况的要点。动态变量映射到 System.Object 实例,然后就会在 DLR 中为程序创建一个站点。该站点负责管理 WriteLine 方法及其参数与目标对象之间的绑定。该绑定维持在类型 Program 的上下文中。为了对动态变量调用方法 Console.WriteLine,您将调用该站点,并传递目标对象(本例中为 Console 类型)及其参数(本例中为动态变量)。该站点将在内部检查目标对象是否真的拥有成员 WriteLine,并且该成员能够接受类似于变量 x 中目前存储的对象这样的参数。如果有任何问题,C# 运行时就会引发 RuntimeBinderException。

图 2 动态变量的真正实现

internal class Program 
{ 
 private static void Main(string[] args) 
 { 
  object x = 1; 
 
  if (MainSiteContainer.site1 == null) 
  { 
   MainSiteContainer.site1 = CallSite< 
    Action<CallSite, Type, object>> 
    .Create(Binder.InvokeMember( 
     "WriteLine", 
     null, 
     typeof(Program), 
     new CSharpArgumentInfo[] { 
      CSharpArgumentInfo.Create(...) 
     })); 
  } 
  MainSiteContainer.site1.Target.Invoke( 
   site1, typeof(Console), x); 
 } 
 
 private static class MainSiteContainer 
 { 
  public static CallSite<Action<CallSite, Type, object>> site1; 
 } 
}

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

Tags:动态 关键字 COM

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