动态智能感知对象(Dynamic Object Intellisense)

2019-06-25 22:58发布

如果动态解析为在编译时对象,和所有的.NET类型扩展对象,为什么不动像有关于智能感知的对象? 每当我使用动态我得到一个消息,说“动态表情。这将在运行时得到解决。” 当然,它也应该显示对象的成员?

Answer 1:

智能感知不动态类型的工作。 它在运行时解决。 静态类型的动态类型的工作,以及匿名类型。

如果智能感知会工作,它会不顾动态性的根本目的。

我想你应该阅读乔恩斯基特回答有关object vs dynamic 这里



Answer 2:

我会怀疑它并没有提供这些成员,因为有可能是重载任意数量的任何对方法object -它显然无法在智能感知时间知道的。 因此,它可以显示特定方法调用了错误的智能感知信息。



Answer 3:

最终,因为所有的动态操作都使用动态分配,即不编译时连接,因此实在没有保证任何成员将实际存在-甚至ToString -因为对象的动态层是自由拦截/替换/删除连基本的操作object 。 其结果是,在智能感知窗口试图显示任何内容将是不真诚的。

是的,它就是被编译为object ,但是这更多的是因为(几乎)所有的对象都是 object (或可装箱这样)等,因此运行时知道,无论动态对象,它可以保存为一个对象引用。

但是,如果你想使用object的成员,或者如果你想智能感知向他们展示,你必须强制转换为object第一-这本身是一个动态操作为好。

这并不是说这是不可能的,以显示对动态语言的智能感知成员,当然这是(我相信铁Python可以),它只是在C#这不是 - 合理等等。



文章来源: Dynamic Object Intellisense