weixin_34024244
Heroin_s
采纳率33.3%
2018-04-22 10:20 阅读 1.3k

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

80

一个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条回答 默认 最新

  • 已采纳
    taoyuanhaoxia 单反的3232 2018-04-22 11:13

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

    点赞 评论 复制链接分享
  • angeldgz angeldgz 2018-04-22 12:22

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

    点赞 评论 复制链接分享
  • angeldgz angeldgz 2018-04-22 12:32

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

    点赞 评论 复制链接分享
  • jxy21c jxy21c 2018-04-22 13:36

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

    点赞 评论 复制链接分享
  • hxycsdn9159 hxycsdn9159 2018-04-23 07:10

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

    点赞 评论 复制链接分享

相关推荐