一个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;
}
}