WEB开发网
开发学院软件开发C语言 C# 4.0: .NET Framework 4 中的新 C# 功能 阅读

C# 4.0: .NET Framework 4 中的新 C# 功能

 2010-09-30 22:47:01 来源:WEB开发网   
核心提示: 在 C# 4.0 中,dynamic 是一种内置类型,C# 4.0: .NET Framework 4 中的新 C# 功能(7),用一个伪关键字标出,但是请注意,从而能够完全决定任何给定动态操作的语义,例如,这种 dynamic 与 var 不同,用 var 声明的变量实际上具有强类型

在 C# 4.0 中,dynamic 是一种内置类型,用一个伪关键字标出。但是请注意,这种 dynamic 与 var 不同。用 var 声明的变量实际上具有强类型,不过程序员将其留给编译器判断罢了。当程序员使用 dynamic 时,编译器不知道要使用的类型,程序员将这种判断留给运行时决定。

动态和 DLR

在运行时支持这些动态操作的基础结构称为动态语言运行时 (DLR)。这个新的 .NET Framework 4 库与其他任何托管库一样运行于 CLR 之上。它负责在启动动态操作的语言与实际发生动态操作的对象之间协调每个动态操作。如果动态操作不是由实际发生动态操作的对象处理的,C# 编译器的运行时组件将会处理绑定。简单但不完整的体系结构图如图 1 所示。

C# 4.0: .NET Framework 4 中的新 C# 功能

图 1 DLR 运行于 CLR 之上

关于动态操作(例如动态方法调用)有一件有趣的事,即接收对象在运行时有机会将其本身注入到绑定中,从而能够完全决定任何给定动态操作的语义。例如,让我们看一看以下代码:

dynamic d = new MyDynamicObject(); 
d.Bar("Baz", 3, d);

如果 MyDynamicObject 的定义如下所示,您可以想象一下会发生什么:

class MyDynamicObject : DynamicObject { 
 public override bool TryInvokeMember( 
  InvokeMemberBinder binder, 
  object[] args, out object result) { 
 
  Console.WriteLine("Method: {0}", binder.Name); 
  foreach (var arg in args) { 
   Console.WriteLine("Argument: {0}", arg); 
  } 
 
  result = args[0]; 
  return true; 
 } 
}

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:NET Framework 功能

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