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

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

 2010-09-30 22:47:01 来源:WEB开发网   
核心提示: 在这种情况下,dynamic 更像一个对象,C# 4.0: .NET Framework 4 中的新 C# 功能(10),而且这两者之间的相似性不仅局限在这些方面,当编译器发出您的程序集并需要发出 dynamic 变量时,在一定程度上,这个异常与您未使用 dynamic 作为开头时,它是通过使用

在这种情况下,dynamic 更像一个对象,而且这两者之间的相似性不仅局限在这些方面。当编译器发出您的程序集并需要发出 dynamic 变量时,它是通过使用类型对象,然后专门对该对象进行标记,来完成这种操作的。从某种意义上讲,dynamic 是一种对象别名,不过是增加了在您使用它时动态解析操作的额外行为而已。

如果您尝试在两种泛型类型之间进行转换,且这两种类型的唯一差别是 dynamic 和 object,您就会看到这种效果;这样的转换总是能够正确进行的,因为在运行时,List<dynamic> 的实例实际上就是 List<object> 的实例:

List<dynamic> ld = new List<object>();

如果您尝试重写一个在声明时带有 object 参数的方法,也可以了解 dynamic 和 object 之间的相似性:

class C { 
 public override bool Equals(dynamic obj) { 
  /* ... */ 
 } 
}

尽管它在您的程序集中会解析为修饰的对象,但我确实喜欢将 dynamic 视为真正的类型,因为它可以提醒您:您使用其他任何类型能够执行的大部分操作,也可以使用 dynamic 来执行。您可以将其用作类型参数或返回值。例如,以下函数定义将让您动态使用函数调用的结果,而不需要将其返回值保存到 dynamic 变量中:

public dynamic GetDynamicThing() { 
 /* ... */ }

对于处理和调度 dynamic 的方式,还有许多细节信息,但是您即使不了解这些信息,也能使用该功能。关键的一点是您可以编写类似于 C# 的代码,如果您编写的代码的任何部分是动态的,编译器就会将其留到运行时处理。

对于动态功能,我要介绍的最后一个主题是:故障。由于编译器无法检查您所使用的动态内容是否真的具有名为 Foo 的方法,因此编译器无法报告错误。当然,这并不意味着 Foo 调用在运行时就能正确执行。它有可能正确执行,但也有很多对象并不具有名为 Foo 的方法。当您的表达式在运行时绑定失败时,绑定器将尽量为您提供一个异常。在一定程度上,这个异常与您未使用 dynamic 作为开头时,编译器提供的异常相似。

上一页  5 6 7 8 9 10 

Tags:NET Framework 功能

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