C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?
2012-06-27 09:14
239 查看
using System;
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("父类构造函数。");
}
public void print()
{
Console.WriteLine("I'm a Parent Class。");
}
}
public class ChildClass: ParentClass
{
public ChildClass()
{
Console.WriteLine("子类构造函数。");
}
public void print(string x)
{
Console.WriteLine(x);
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
child.print("打印子类");
}
}
首先要说的是,执行和继承是两码事。继承是指子类是否具有和父类一样的类成员而不用去重新再把这些成员定义或实现一遍,所以继承的目的就是重用。执行是指在类的内部或外部来使用这些成员。
执行构造函数是指在使用某个类的时候,需要创建该类的对象并为这个对象的所有成员分配内存的过程,如果该类继承了某个父类的话,那首先就要为父类的成员分配内存,当然就会先执行父类的构造函数了。另外,当子类构造时,碰到有override被重写的成员时,则这个曾经在父类构造时被分配的内存地址会在子类构造时被新的地址覆盖掉。
在c#中,子类继承父类,那么在调用子类的非静态构造函数时会默认调用基类的构造函数,这是一个规则,并不是函数继承,函数是无法继承的,继承只是用在类这个事物上。
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("父类构造函数。");
}
public void print()
{
Console.WriteLine("I'm a Parent Class。");
}
}
public class ChildClass: ParentClass
{
public ChildClass()
{
Console.WriteLine("子类构造函数。");
}
public void print(string x)
{
Console.WriteLine(x);
}
public static void Main()
{
ChildClass child = new ChildClass();
child.print();
child.print("打印子类");
}
}
首先要说的是,执行和继承是两码事。继承是指子类是否具有和父类一样的类成员而不用去重新再把这些成员定义或实现一遍,所以继承的目的就是重用。执行是指在类的内部或外部来使用这些成员。
执行构造函数是指在使用某个类的时候,需要创建该类的对象并为这个对象的所有成员分配内存的过程,如果该类继承了某个父类的话,那首先就要为父类的成员分配内存,当然就会先执行父类的构造函数了。另外,当子类构造时,碰到有override被重写的成员时,则这个曾经在父类构造时被分配的内存地址会在子类构造时被新的地址覆盖掉。
在c#中,子类继承父类,那么在调用子类的非静态构造函数时会默认调用基类的构造函数,这是一个规则,并不是函数继承,函数是无法继承的,继承只是用在类这个事物上。
相关文章推荐
- C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?
- C#继承中构造函数,成员变量的执行顺序
- c# 对 struct为什么不能继承类和结构的思考
- C#类的继承中,构造函数的执行顺序
- 构造函数为什么不能是虚函数
- 为什么Linux和Windows的可执行文件不能通用?
- 为什么是装饰模式而不是继承
- 关于类簇表示类为什么不能被继承,不忍独享
- java中的接口为什么可以多继承,而其他类则不能实现多继承
- 汉高澳大利亚sinox为什么不能下载源代码,因为sinox执行unix/linux/windows规划
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容 【转】 参考度4.6星
- 构造函数为什么不能是虚函数
- 为什么要优先使用组合 而不是继承?
- 关于拷贝(复制)构造函数为什么不能用值传递
- 为什么构造函数不能为虚函数
- 构造函数为什么不能是虚函数
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- 【java】构造函数的继承执行顺序
- C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
- 为什么构造函数不能声明为虚函数