在C#4.0中在运行时附加属性和方法?

Web*_*eb2 5 .net c# dynamic

使用动态功能在运行时附加方法和属性有什么性能影响,如本博文中所述?

ExpandoObject的实际用途是什么?

Jon*_*eet 10

好吧,你并没有真正将方法和属性附加到对象上.就CLR而言并非如此.你只是将项目分成字典,并在ExpandoObject实施IDynamicMetaObjectProvider中要求的属性值(或要求执行方法),它会采取相应的行动.

性能显然比静态绑定访问方法/属性要慢,但DLR非常糟糕.我个人担心的不是性能,而是因为缺乏类型安全性 - 如果没有编译器发现它,错误就会轻易搞砸你的代码.

我个人的建议是只在C#4中使用动态类型,它给出了非常明显的好处......我希望它比较少见(比如不安全的代码).

用途ExpandoObject?不是很多,IMO - 主要是在与其他动态语言交谈时.

  • 比较少见?!你先生,不是Ruby程序员:) (3认同)
  • @Paul:确实......因为我们谈论的是C#,而不是Ruby.作为一种基本上静态类型的语言,我相信将C#变成静态和动态类型的混合语言是相对罕见的.如果你想广泛使用动态类型,请使用IronRuby或IronPython ...... (3认同)