dynamic d = "hello";
Console.WriteLine (d.ToUpper()); // HELLO
Console.WriteLine (d.Foo()); // Compiles OK but gives runtime error
我在本节中读到了一本书,在第三行中它只会在运行时抛出错误,但即使Foo
方法不存在也会编译。
为什么不在编译时而不是在运行时检查它?
编辑: 有什么意义,什么时候可以使用这个概念?
答案 0 :(得分:4)
使用dynamic
,您指示编译器忽略它并让运行时处理它。在处理COM和编译器不知道的其他接口时,这非常有用。
如果您想要隐式类型,请改用var
。编译器将推断出类型并保持强类型。
答案 1 :(得分:4)
dynamic
- 关键字会导致此行为。在创建变量dynamic
时,您可以使用它来所有,这使得它不是编译时安全的。因此,通过使它dynamic
完全绕过编译时类型 - 这就是为什么在使用它时应该小心。
在运行时检查成员是dynamic
的全部要点 - 为什么它应该存在呢?
我假设你有意想要{em>给你编译时安全的var
- 关键字。看看this point for the difference on both。至于何时使用关键字,请查看this post。