我是C#的新手,我想知道,如果我创建一个子类的实例,它是否也会自动创建父类的实例或者什么?
这是我的代码:
class Program
{
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("ChildClass uses my Ctor ");
}
}
public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("SaySomething");
}
}
public static void Main()
{
ChildClass child = new ChildClass();
}
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 64
它是否也会自动创建Parent类的实例?
不是一个单独的实例; 在讨论继承时,这ChildClass
是一个ParentClass
实例.
用语言来说,这就像:
在创建狗时,我们还创建了一个动物实例吗?
我们不制造狗和(分开)制造动物; 狗是动物的例子.如果我们制作一只贵宾犬,贵宾犬就是狗,它就是动物.
不,它没有,但它调用基础构造函数(父类的构造函数).在您的情况下,这是空的,因此编译器会为您完成对基类构造函数的调用:
class Program
{
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("ChildClass drived from me ");
}
}
public class ChildClass : ParentClass
{
public ChildClass() : base() // base() call is voluntary
{
Console.WriteLine("This also use my Ctor");
}
}
public static void Main()
{
ChildClass child = new ChildClass();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您的基类没有无参数构造函数,则必须调用它
class Program
{
public class ParentClass
{
public ParentClass(string foo)
{
Console.WriteLine("ChildClass drived from me ");
}
}
public class ChildClass : ParentClass
{
public ChildClass() : base("some foo") // base call is obligatory
{
Console.WriteLine("This also use my Ctor");
}
}
public static void Main()
{
ChildClass child = new ChildClass();
}
}
Run Code Online (Sandbox Code Playgroud)
根据定义,当ChildClass
继承形式时ParentClass
,ChildClass
对象也属于它ParentClass
.
如果您的命名更加真实,那么它将更容易理解.
class Animal {}
class Cat : Animal {}
var rocky = new Cat();
Run Code Online (Sandbox Code Playgroud)
看,岩石是一只猫,但它也是一种动物.
你问题的实际答案是
'不',它是Child类的实例,而不是Parent的实例.
但是如果你的问题是:"你是否有一个包含Parent类的所有属性的实例对象",答案是
'是',您将父类中的所有属性和字段都复制到Child实例中.
归档时间: |
|
查看次数: |
3500 次 |
最近记录: |