C#继承层次结构中的对象创建

时间:2016-03-06 15:16:57

标签: c# oop object inheritance

我有两个班级。

enter image description here

执行此行时,

Child myChildObj = new Child();

这会创建单独的两个对象ParentChild吗? 或者只是一个子对象,其中包含父方法和属性

enter image description here

更新:我想在CLR中知道它是否在运行时实际创建了一个Parent对象(无法访问)。

我在tutorialspoint网站上看​​过以下引用。

  

派生类继承基类成员变量和成员方法。 因此,应在创建子类之前创建超类对象。您可以在成员初始化列表中给出超类初始化的说明。

我使用以下代码来验证这一点,并且我得到了子对象和父对象的相同的hashCode值

Console.WriteLine("child object hashcode : "+this.GetHashCode());
Console.WriteLine("base object hashcode : "+base.GetHashCode());

5 个答案:

答案 0 :(得分:3)

这将创建Child类型的单个实例,其中包含两种类型的方法。您可以在创建的实例上调用这些方法。

答案 1 :(得分:2)

ChildParent的子类,因此它继承了它的所有属性。但是当您创建Child的对象时,您只会获得Child的对象。没有“第二部分”负责处理与Parent相关的事情。内存中只存在一个对象。该单个对象的类型为Child,因此也与Parent类型兼容。

答案 2 :(得分:1)

所给出的答案都与您从书本中学到的内容一样抽象,我觉得您想知道它的外观是什么。您可以将子实例视为一块内存,如果您实例化一个父对象,只需要添加一些额外的位和部分(子位),就可以得到它。您获得的引用是指向开头的指针,即基类实例。这就是为什么没有人会看到父实例和子实例之间的区别。因为子实例是父实例(附加了子位)。这会在您实例化GrandChild对象时继续,这些对象也会添加一些额外的位。现在你了解了为什么以及何时进行投射以及何时会造成麻烦。

答案 3 :(得分:0)

它只创建一个类“Child”的实例。 “Child”的实例从“Parent”类继承(包括)所有成员。

答案 4 :(得分:0)

只创建了一个可引用的对象myChildObj。父类用作模板,但最终未实例化。该对象将包含Parent类的所有成员变量和方法以及其自己的类中的变量和方法。

也可以使用多态来创建对象:

Parent obj = new Child();