如果动态解析为在编译时对象,和所有的.NET类型扩展对象,为什么不动像有关于智能感知的对象? 每当我使用动态我得到一个消息,说“动态表情。这将在运行时得到解决。” 当然,它也应该显示对象的成员?
Answer 1:
智能感知不动态类型的工作。 它在运行时解决。 静态类型的动态类型的工作,以及匿名类型。
如果智能感知会工作,它会不顾动态性的根本目的。
我想你应该阅读乔恩斯基特回答有关object vs dynamic
这里
Answer 2:
我会怀疑它并没有提供这些成员,因为有可能是重载任意数量的任何对方法object
-它显然无法在智能感知时间知道的。 因此,它可以显示特定方法调用了错误的智能感知信息。
Answer 3:
最终,因为所有的动态操作都使用动态分配,即不编译时连接,因此实在没有保证任何成员将实际存在-甚至ToString
-因为对象的动态层是自由拦截/替换/删除连基本的操作object
。 其结果是,在智能感知窗口试图显示任何内容将是不真诚的。
是的,它就是被编译为object
,但是这更多的是因为(几乎)所有的对象都是 object
(或可装箱这样)等,因此运行时知道,无论动态对象,它可以保存为一个对象引用。
但是,如果你想使用object
的成员,或者如果你想智能感知向他们展示,你必须强制转换为object
第一-这本身是一个动态操作为好。
这并不是说这是不可能的,以显示对动态语言的智能感知成员,当然这是(我相信铁Python可以),它只是在C#这不是 - 合理等等。
文章来源: Dynamic Object Intellisense