C#中父类接口中包含子类属性的疑惑

一个IHtmlDocument接口继承于另一个IHtmlContainer接口,而IHtmlContainer继承于基接口IHtmlDomObject,基接口IHtmlDocument中竟然还声明了一个 IHtmlDocument的属性
IHtmlDocument

{
get;
}
,我是第一次看见这种模式,这是一种设计结构吗?这种继承不是一个死循环吗?

public interface IHtmlDomObject
{
object RawObject
{
get;
}

/// <summary>
/// 获取 DOM 对象的原始 HTML,如果不支持,返回null
/// </summary>
[EditorBrowsable( EditorBrowsableState.Advanced )]
string RawHtml
{
  get;
}
/// <summary>
/// 获取 DOM 对象所属的文档
/// </summary>
IHtmlDocument Document
{
  get;
}

}

public interface IHtmlContainer : IHtmlDomObject
{

/// <summary>
/// 获取所有子节点
/// </summary>
/// <returns>容器的子节点</returns>
IEnumerable<IHtmlNode> Nodes();


/// <summary>
/// 获取用于同步的对象
/// </summary>
object SyncRoot
{
  get;
}

}

///
/// 定义一个 HTML 文档
///
public interface IHtmlDocument : IHtmlContainer
{

/// <summary>
/// 获取文档内容的统一资源位置
/// </summary>
Uri DocumentUri
{
  get;
}

/// <summary>
/// 获取文档的声明信息,可以是xml声明,也可以是DTD。如果不被支持,则返回null。
/// </summary>
string DocumentDeclaration
{
  get;
}

/// <summary>
/// 获取文档碎片的管理器,如不支持文档碎片,请返回 null 。
/// </summary>
IHtmlFragmentManager FragmentManager
{
  get;
}

/// <summary>
/// 获取修改 DOM 结构的修改器,如不支持修改 DOM 结构,请返回 null 。
/// </summary>
IHtmlDomModifier DomModifier
{
  get;
}

/// <summary>
/// 获取该文档应当遵循的 HTML 规范
/// </summary>
HtmlSpecificationBase HtmlSpecification
{
  get;
}

}


5个回答

类中定义一个属性是类本身 说明此类的一个具体的实例包含另一个相同类的实例 比如有一节火车车厢对象中有一个属性指向另一节火车车厢对象;
ihtmldocument 继承ihtmlcontainer说明ihtmldocument 是一个container ,那么实现iHTML document接口的子类实例就可以contain另一个
ihtmldocuemnt子类实例。
结构设计模式中合成模式中子类composite就有指向父接口的属性

人类IHuman有父亲IHuman Father和母亲IHuman Mather两个属性

这个类似引用,即指向自己的一个链接;并没有实现实际的内容,所以不会死循环;
常用的地方比如链表节点的定义,经常会定义一个指向上一个节点的引用和下一个节点的引用.其实保留的是一个引用地址:

这个跟设计模式没有任何关系,你其实是被继承这个定义给搞混淆了,假如他们之间没有继承关系你是不是就不会糊涂了? 这个只是一个属性,跟面向对象的思想没有任何关系,你不要跟继承这个定义搞到一起去理解就好了

比如你设计一个人类的接口IHuman,而人类有父亲IHuman Father{get}和母亲IHuman Mather{get}两个属性,这样就能理解了吧.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐