动态变量编译

时间:2016-07-20 10:20:04

标签: c# c#-4.0

dynamic d = "hello";
Console.WriteLine (d.ToUpper()); // HELLO
Console.WriteLine (d.Foo()); // Compiles OK but gives runtime error

我在本节中读到了一本书,在第三行中它只会在运行时抛出错误,但即使Foo方法不存在也会编译。

为什么不在编译时而不是在运行时检查它?

编辑: 有什么意义,什么时候可以使用这个概念?

2 个答案:

答案 0 :(得分:4)

使用dynamic,您指示编译器忽略它并让运行时处理它。在处理COM和编译器不知道的其他接口时,这非常有用。

如果您想要隐式类型,请改用var。编译器将推断出类型并保持强类型。

答案 1 :(得分:4)

dynamic - 关键字会导致此行为。在创建变量dynamic时,您可以使用它来所有,这使得它不是编译时安全的。因此,通过使它dynamic完全绕过编译时类型 - 这就是为什么在使用它时应该小心。

在运行时检查成员是dynamic的全部要点 - 为什么它应该存在呢?

我假设你有意想要{em>给你编译时安全的var - 关键字。看看this point for the difference on both。至于何时使用关键字,请查看this post