为什么VS Watch窗口显示ContentItem>基数> ContentItem>基地一路下来?

时间:2014-08-19 22:25:34

标签: c# visual-studio orchardcms orchardcms-1.8

我理解类层次结构和继承的基础知识。因此,我不了解Watch窗口为ContentItem对象显示的类层次结构。

It's turtles all the way down.

似乎说ContentItem继承ContentItem继承ContentItem ......一直到无穷大。这是什么意思?

3 个答案:

答案 0 :(得分:2)

我认为在这个具体案例中,你会看到Orchard独有的东西。

我下载了源代码,而ContentItem是一个动态对象,它公开了一个名为ContentItem的字段。很可能你会看到一个只是

的层次结构

PageBase > Pages > Admin Page > Components > Component > Login Component > Text > etc

我认为这个对象树比你的耐心更深。在大多数情况下,你是对的 - "基地"将带您到超类。

答案 1 :(得分:2)

该类型显示在监视列表的第三列中,MS向右推了很远,所以你几乎没有注意到它。第二列是"价值"并确实得到这些重复的值。

enter image description here

答案 2 :(得分:2)

@insta几乎是对的。 ContentItem派生自DynamicObject,它从无任何内容派生(它只实现一个接口)。在任何具有与其所属属性不同的具体类型的对象下,调试器首先显示与其最具体表示相同的对象。例如,如果您查看内容项的记录属性,您将看到它是ContentItemRecord类型,但如果您部署它,则会在其下面看到标记为[ContentItemRecordProxy]的内容。 VS似乎对动态类型做了一些特别的事情,但是它似乎对基本类型应该是什么感到困惑,所以它向你展示了[Orchard.ContentManagement.ContentItem]下的实际对象,它本身有一个基类,等等到无限和超越。你可以放心地忽略这种奇怪的行为。