1

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

一路下来都是乌龟。

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

4

3 回答 3

2

我认为在这种特定情况下,您会看到 Orchard 独有的东西。

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

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

我认为这个对象树比你的耐心更深。在大多数情况下,您是正确的——“基础”会将您带到超类。

于 2014-08-19T22:38:06.143 回答
2

该类型显示在监视列表的第三列中,MS 好心地将其推到了右侧,因此您几乎没有注意到它。第二列是“值”,确实得到了这些重复的值。

在此处输入图像描述

于 2014-08-19T22:51:35.557 回答
2

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

于 2014-08-22T18:57:10.617 回答