动态关键字是否*仅*用于动态语言?

Joh*_*ski 4 c# reflection dynamic dynamic-keyword c#-4.0

我参加代号营12日前,和扬声器也表示,新dynamic的C#4.0的关键字应该只用于动态语言interopping.我认为他也说过,与正常反射(它本身有点慢)相比,它有点慢.

但后来我听到斯科特汉塞尔曼提到动态关键词"使反思不那么痛苦".

因此,为了反映不是来自动态代码的对象,使用dynamic关键字是否可以接受?

Mar*_*ell 7

我会说"不",但不要疯狂地开始使用它.实际上,dynamic从我的基准测试开始,比基本反射更快,因为它保留了代表(而不是一直使用反射Invoke).特别是,两个优点是:

  • 调用泛型方法(MakeGenericMethod等等太痛苦了)
  • 呼叫运营商

但是,有一些方法可以通过接口等方式完成所需的操作; dynamic在非动态类型上真的相当于鸭子打字.这在一组非常有限的场景中很有用; 主要是:接口是首选.不要排除它们.

缺点dynamic是有用(无需编写疯狂的代码),您需要在编译时知道名称; 通常情况并非如此,或者我们不会在这个泡菜中!如果你只知道在运行时的名称,还有其他的选择(Expression,Delegate.CreateDelegate"HyperDescriptor",DynamicMethod访问等)以快速方式的数据.