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问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
父类和子类的关系---疑惑
public class ClassA rn rn int i;rn void display()rn System.out.print("this is A");rn rnrnpublic class ClassB extends ClassArn int j;rn void display()rn System.out.print("this is B");rn rn void show()rn rn rnrnpublic class Test rnrn public static void main(String ...args)rn// program1-------can't compilern// ClassA a = new ClassA();rn// ClassB b = new ClassB();rn// ClassA aRef;rn// ClassB bRef;rn// aRef = a;rn// aRef.display();rn// aRef =b;rn// aRef.display();rn// aRef.show();rn rn rn// program2------can compile but throws an runtime exceptionrn// ClassA a = new ClassA();rn// ClassB b = new ClassB();rn// ClassA aRef;rn// ClassB bRef;rn// aRef=a;rn// bRef=(ClassB)aRef;rn// bRef.show();rn rn// program3-------can compile and runrn ClassA a = new ClassA();rn ClassB b = new ClassB();rn ClassA aRef;rn ClassB bRef;rn aRef = a;rn aRef.display();rn aRef = b;rn bRef =(ClassB)aRef;rn bRef.show();rn bRef.display();rn rnrn这是我写的一个父类与子类之间转换的程序,请高手指点一下这三个程序结果产生的原因
父类和子类的疑惑~
类B是类A的子类,那么下面这么语句中rnrnA myclass = new B()rnrnmyclass到底是那个类的对象呢?
c#中 父类调用子类的属性、方法
  我们习惯认为,子类对父类是不可见的,或者说父类不知道子类的存在,所以父类是调用不到子类的方法、属性的,以下这种方式,可以实现父类调用子类属性、方法的功能,欢迎拍砖。。。   public class WeChatBaseController  //父类 { public WeChatBaseController() { } public string MyUserList ...
C#接口中的属性用法
C#接口(interface)中定义的方法或是属性,在实现这个接口的类中,都要对其进行一个实现的操作。(这里说一个小技巧:在类继承接口时,可以在接口的后面按下CTRL+.,然后就可以快速实现接口中的各个项了(包括方法和属性)。只是需要注意的是,对于方法和属性都会有这样的代码“throw new NotImplementedException();”,这就需要对其进行实现。)          很
c#子类复写父类方法疑惑
[code=csharp]using System;rnusing System.Collections.Generic;rnusing System.Linq;rnusing System.Web;rnrn/// rn/// Summary description for PageBasern/// rnpublic class PageBase : System.Web.UI.Pagernrn public String identity;rn public PageBase()rn rn //rn // TODO: Add constructor logic herern //rn rn rn //重写Page基类的OnLoad事件方法 rn protected override void OnLoad(EventArgs e)rn rn if (Session["username"] == null)rn rn Response.Write(" ");rn //Response.Redirect("http://10.117.38.89/trainingtools/");rn ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "location.href='http://10.117.38.89/trainingtools/';", true);rn rn else rn if (Session["userauth"].ToString() == "3" || Session["userauth"].ToString() == "4")rn rn identity = "manager";rn rn else if (Session["userauth"].ToString() == "2")rn rn identity = "leader";rn rnrn else if (Session["userauth"].ToString() == "1")rn rn identity = "employee";rn rn rn rn[/code]rnrn大家好,为了不必在每个aspx页面都写判断session过期的代码,我写了上面这个类PageBase继承自Page类并重写其中的OnLoad方法,然后每个必须判断session过期的页面我都让它继承自PageBase这个类,现在我遇到的问题是在页面上base.OnLoad(e);这一句下面的代码不会执行,请问是怎么回事呢,.net不是很熟悉,请大神帮忙解答下,谢谢了!rn[code=csharp]using System;rnusing System.Collections.Generic;rnusing System.Web;rnusing System.Web.UI;rnusing System.Web.UI.WebControls;rnusing System.Data;rnusing System.Data.SqlClient;rnrnpublic partial class personalinformation : PageBasernrn //public string identity;rn protected void Page_Load(object sender, EventArgs e)rn rn base.OnLoad(e);rn Response.Write(" ");rn rn rnrn[/code]
子类重写父类属性
1、子类重写父类的属性,编译器不会合成带下划线的属性,需要自己手动合成setter和getter,否则这个属性将由父类实现,也就是说如果子类没有手写set和get方法,声明的@property相当于没写 2、在 oc 中属性就是给一个类的成员变量提供封装: Objective-C properties offer a way to define the i...
子类属性覆盖父类
java 三大属性封装,继承,多态如果对于一般的方法的覆盖,大家一般都可以判断出来但是对于子类的属性覆盖,还是需要时间分析class A { int a = 100; void f() { System.out.println(a); } } class B extends A { int a = 9999; void f() { ...
在父类获取子类属性
NULL 博文链接:https://2528.iteye.com/blog/1523901
C#中子类与父类的相互转换
1.父类不能直接强制转换成子类 2.子类可以强制转换成父类,但是在父类中只能取父类的字段与方法因此在一个父类对应多个子类的时候,不知道具体是哪个子类的时候,就可以先声明一个父类的类型。(如例1) 3.由1,2知,父类不能直接强制转换成子类,但是可以通过间接的方法进行转换,例1中有所体现:将子类转换成父类,然后再把父类转换成子类,如例2。 特别说明:虽然可以通过间接方式将父类转成子类,但实际用处
C# 父类与子类的简单使用
protected  子类可以访问父类 Random  r=new Random( ); int rand=r.Next(1,45);   // 产生在1--44之间的随机数 namespace convert {     class Program     {         static void Main(string[] args)         {
C# 父类与子类
大家好,我是C#的初学者。rn请问通过父类引用子类,从而来使用子类override方法,有什么实际用处。rn(不通过父类引用子类,而直接通过子类的对象来调用该方法不是也可以实现吗?为什么要这么麻烦呢)rnrn谢谢大家。
子类继承父类后,子类访问父类属性
一个新手问题。。搜索了好久没找到答案。。。rnrn[code=java]rnpublic class Fighter rn public int role=5;rnrnrn[/code]rnrn一个类继承了它rnrn[code=java]rnpublic class Card extends Fighter rnpublic Card()rnrole=3;rnSystem.out.println(super.role);//为何这句话输出的是3而不是5??rnrn[/code]rnrn子类构造函数中对role进行操作,然后输出语句为何输出的是3而不是5?rnrnrn[code=java]rnpublic class Card extends Fighter rnpublic int role;rnpublic Card()rnrole=3;rnSystem.out.println(super.role);//输出5rnrn[/code]rnrn为何覆盖了role属性之后 输出就正确了。
子类如何隐藏父类的属性
比如TA有个属性xrnTB是TA的子类,如何让TB隐藏属性xrnrn比如:rnvarrn a:ta;rn b:tb;rn x:Integer;rnbeginrn a:=ta.create;rn b:=tb.create;rn x:=a.x; //可通过编译rn x:=b.x; //不可通过编译rnend;
子类怎么访问父类的属性.
class A rnint a = 13;rnrnrnclass B extends A rn a = 14; //为什么这里不能修改?rn
父类调用子类属性的问题
public class 父类rnrn public void Dosomething()rn rn //在这里我希望得到子类新增的属性及对应的值rn rnrnpublic class 子类1 : 父类rnrn public 属性1;rn public 属性2;rnrnpublic class 子类2 : 父类rnrn public 属性3;rn public 属性4;rnrn可能会有多个子类rnnew 子类1().Dosomething()里面的对应的属性是子类1的rnrn或者不用这种继承的结构,只要能实现相同的功能就行
python 父类和子类属性相互调用
class father(): def __init__(self): self._name = &quot;aaa&quot; def fun1(self): method = eval('self.' + 'ss' + '_db') print(method) def fun2(self): tt = self.ss_d...
子类属性能否赋值到父类
class arnrn public long AA get; set; rn public long BB get; set; rnrnrnclass b : arnrn public long CC get; set; rnrnrn当b被填充后,a里的属性如何也能一起被数值?
父类如何访问子类属性?
[code=C#]父类如何访问子类属性?rnrnrnpublic class Supclass rnrn public int ID get; set; rnrnrnpublic class Subclass : Supclass rnrn public string Name get; set; rnrnrnrnprivate Subclass Son =new Subclass();rnSon.Name="Test";rnrnpublic Supclass Fatherrnrn get return Son; rnrnrnSubclass Son1=(Subclass)Father;rnrn为什么还能得到Son1.Name="Test"?[/code]
OC----父类与子类同名属性
子类不能存在与父类同名的方法,属性 super 关键字: 1. 可以用在类方法,对象方法中, 同self, 继承用super 的可读性要好 2. 在对象方法中可以使用 super关键字调用当前对象从父类继承过来的对象方法.[self say] = [super say] 3. 在类方法中 super关键字可以调用当前类从父类继承过来的类方法 a. 类方法也能被子类继承. 父类中的类方法可以使用父类...
子类静态属性、子类属性赋值、子类构造函数、子类构造代码块、子类静态代码块、父类静态属性、父类构造函数、父类构造代码块、父类静态代码块执行顺序
先看父类构造方法、子类构造方法、子类属性赋值 class Father { public Father() { System.out.println("父类构造方法"); show(); } public void show() { System.out.println("父类show"); } } class Son extends Father { int num =...
在继承中子类如何将父类的属性在子类中改名和屏蔽
在继承中子类如何将父类的属性改名和屏蔽rn如Parent有属性a,brnrn子类Child:Parent,Child继承于Parent,当然有属性a,brnrn,现在我要做的事情是在Child中,rn1、不要b 了rn2、要a但想改为另外一个名字AA.rnrn也就是实例化时rnChild c = new Child();rnc.AA =...,但看不到brn
父类集合中取子类属性
[code=csharp]var lstObject = UtilsLocCache.GetCacheAll(type.Name);rn if (lstObject.Count > 0)rn rileBaseTable.DataSource = lstObject[/code]rnrnvar lstObject = UtilsLocCache.GetCacheAll(type.Name) 这句话取出的是一个List集合里面的数据是子类bslocation的rn现在我给dategridtable.DataSource 赋值希望显示出我子类的数据 rnrn需要怎么处理??
C#中,子类怎么初始化父类的readonly属性?
class Arnrn public readonly int _X;rn public A()rn rn _X=3;rn rnrnrnclass B:Arnrn public B()rn rn //Init _X?rn rn
在子类中,父类对象为什么不能访问父类的private属性
[code=Java]rnclass Father rn private int fage;rn public int getFage() rn return fage;rn rnrn public void setFage(int fage) rn this.fage = fage;rn rnrn int fweight;rn protected String fgender;rn public int fheight;rn rn public Father(int age, int weight, String gender, int height) rn this.fage = age;rn this.fweight = weight;rn this.fgender = gender;rn this.fheight = height;rn rn rn public Father() rn rn rnrnrnpublic class FatherAndSon extends Fatherrnrn private int sage;rn int sweight;rn protected String sgender;rn public int sheight;rn rn public FatherAndSon(int age, int weight, String gender, int height) rn super(55, 130, "male", 160);rn this.sage = age;rn this.sweight = weight;rn this.sgender = gender;rn this.sheight = height;rn rn rn public static void main(String[] args) rn Father f = new Father(50, 130, "male", 160);rn FatherAndSon s = new FatherAndSon(25, 130, "male", 170);rn [color=#FF0000]//System.out.println(f.fage); 为什么父类对象f在这里不能访问自己的private属性[/color]rn rnrnrn[/code]rn既然子类不能继承父类的private属性,那么也就无法直接访问父类的private属性。但是为什么在子类中,父类对象也不能访问自己的private属性呢?
父类子类中的执行顺序
举例说明:public class HelloB extends HelloA { public HelloB() { } { System.out.println("I’m B class"); } static { System.out.println("static B"); } public static void main(String[] args
OC中的父类和子类
与其说是一种继承, 更像是一种进化, 在原有的基础上可增加更多的功能, 同时也可以舍弃一些不需要的
为什么子类不能继承父类的成员变量?????疑惑。。。
class Arnpublic:rnA() i = 100;rnint GetI()return i;rnprotected:rnint i;rn;rnrnclass B : public ArnB()A:A();rn;rnrn调用:rnB b;rnint i = b.GetI(); //此处i=-398394384!为什么不能返回100?
关于子类调用父类private函数的疑惑。
最近看thinking in java时遇到了一点问题,请教一下大家。rn示例代码如下:rn[code=Java]rnabstract class Father rn private void test() rn System.out.println("this is Father.test()");rn rn abstract void show();rn Father() rn System.out.println("this is Father.Father()");rn show();rn test();rn rnrnrnpublic class Child extends Father rn int radius;rn void show()rn System.out.println("this is Child.show(),radius = " + radius);rn rn Child(int r)rn radius = r;rn show();rn rn /**rn * @param argsrn */rn public static void main(String[] args) rn // TODO Auto-generated method stubrn new Child(7);rn rnrn[/code]rnrn运行结果如下:rn[code=Java]rnthis is Father.Father()rnthis is Child.show(),radius = 0rnthis is Father.test()rnthis is Child.show(),radius = 7rn[/code]rnrn[b]我的理解:[/b]rn首先我建造了一个抽象的父类Father类,其中有一个私有的函数test(),一个抽象的函数show(),然后rn在Father的构造函数中,我调用了这两个函数。之后我建造了子类Child类,继承了父类Father类,并实rn现了Father类的抽象函数show(),在Child类的main函数中我创建了一个Child类的实例。rnrnrn[b]疑惑:[/b]rn按照初始化的顺序,我的理解是:rn(1)首先分配给Child对象的成员变量radius初始值0.rn(2)之后调用Father的构造函数,由于多态的特性调用show()函数时,实际上调用的是Child重写的show()函数。rn[color=#FF0000]rn(3)按照show()函数的打印结果,test()函数也应该像show()函数一样执行,由Child对象来调用,但是由于test()函数是private的,Child应该调用不到test()函数。而且abstract类是不会生成对象的,我不明白为什么会产生这样的打印结果?按照这个打印结果,那说明执行了一个this.test()的操作,但是abstract类是不会产生对象的呀。rn(4)还有就是按照我写的这个程序,会不会产生一个Father的对象?rn[/color]rnrnrnrnrnrnrnrnrnrnrnrnrnrn
Kotlin系列之接口中的属性
今天我们看看如何让在Kotlin的接口中声明属性。 在前面的文章中我们已经介绍过Kotlin中的接口,这里我们先复习一下,然后再重点说说Kotlin中的接口如何声明属性。 Kotlin中的接口 下面是一段Kotlin中接口声明的代码,帮助大家复习一下。 Kotlin代码 package kt interface Clickable{ fun click() ...
C# 递归找出父类的子类
public List FindChild(List list, int parent = 0) { List pageValues = new List(); if (list.Where(o => o.ParentId == parent).Count() > 0) { fo
C#父类获取子类 引用
如题 父类 获取子类的obj引用rnpublic class Basernrn public void A()rn rn //如何操作子类的B属性rn rnrnpublic class Child:Basernrn public string Bget;set;rnrn如何在父类中 操作子类的B属性
C#父类中获取子类的类名
.父类里 直接 this.GetType().Name 获取到子类,就可以得到子类的Attribute 例如   Type chindType = this.GetType() ;//获取子类的类型  childAttr = Attribute.GetCustomAttribute(chindType, typeof(childClassLoginAttribute), f
C#中父类如何访问子类的静态变量
[code=C#]rnclass Programrn rn static void Main(string[] args)rn rn Pro.s();rn rn rn class IOrn rn public static void v()rn rn Console.WriteLine(Pro.a); //这里a受保护级别限制 无法访问rn rn rn class Pro:IOrn rn static int a;rn public static void s()rn rn a = 5;rn rn[/code]rnrn这问题该如何解决?
C#中父类与子类构造函数调用顺序说明
  我们先来建立一个父类,一个子类,一个子类的子类 class BaseClass { private string name = &quot;BaseClass&quot;; public BaseClass() { Console.WriteLine(name); } } clas...
C#中父类和子类的转换问题?
我在一个类中引用一个父类,怎么才能将这个父类的实例转变成我传统过来的子类的实例呢?rn比如:rnclass A:Brnrn rnrnrnclass Crnrn B a;rn c(B a)rn rn this.a = a;rn rn public void say()rn rn //todo 这里将a转换为A的实例 应该怎么做rn rnrnrnclass testrnrn public static void Main()rn rn A a = new A();rn C c = new C(a);rn rn
c#中,父类的引用指向子类的对象
有些不太懂,请教一下,最好实例一下,谢谢
父类与子类
这个份博客的起因 A b = new B (); ,这里的b并不是A的实例,而是B的实例。 如何理解 B c = new B(); A a = c; A是B的父类 当构造函数相同时,优先编译父类如: 但子类有override修饰时,c就可以调用 刚接触:重写,重载,隐藏不太了解 慢慢理解 public abstract class A { public A() ...
父类子类
[code=C/C++]rnclass T1rnrnpublic:rn void Speak()rn rn printf("I am 1\n");rn ; rn;rnrnclass T2 :public T1rnrnpublic:rn void Speak()rn rn printf("I am 2\n");rn ;rnrn;rnrnrnvoid main()rnrn T1 *t1 = new T1();rn T1 *t2 = new T2();rnrn t1->Speak();rn t2->Speak();rnrnrn[/code]rnrn为什么t2调用的是父类的而不是自己的Speak()啊
子类、父类
小弟有一问题:rnclass arnrn b u[];rnrnclass b :public arnrnrnrn这样会出问题吗?(就是在父类中引用子类)
C++ 子类转父类 父类确定子类
将一个结构体转换为字节数组,再讲字节数组还原成结构体,子类转换为父类,通过父类信息确定是哪个子类转换的父类
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池