首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态对象智能感知

动态对象智能感知
EN

Stack Overflow用户
提问于 2012-07-02 16:18:17
回答 3查看 5K关注 0票数 1

如果dynamic在编译时解析为object,并且所有的.NET类型都扩展object,那么对于IntelliSense来说,dynamic为什么不像object那样工作呢?每当我使用dynamic时,我都会收到一条消息,上面写着“动态表达式。这将在运行时解决”。当然,它也应该显示对象成员?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-02 16:19:44

智能感知在动态类型中不起作用。它在运行时被解析。动态类型适用于静态类型和匿名类型。

如果intellisense能够工作,那它就违背了动态性的目的。

我认为你应该读一下乔恩·斯基特关于object vs dynamic here的回答

票数 4
EN

Stack Overflow用户

发布于 2012-07-02 16:21:29

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

票数 1
EN

Stack Overflow用户

发布于 2012-07-02 16:22:20

最终,因为所有动态操作都使用动态分派,即不是编译时链接,因此不能保证任何成员确实存在-甚至ToString -因为对象的动态层可以自由地拦截/替换/移除甚至是object的基本操作。因此,对于intellisense窗口来说,试图显示任何内容都是不真诚的。

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

但是如果你想使用object成员,或者你想让智能感知显示它们,你必须首先转换成object --这本身也是一个动态操作。

这并不是说不能为动态语言显示intellisense成员,当然可以(我相信Iron Python可以),只是在C#中是不可能的--这是合理的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11289995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档