C#继承与构造函数的调用
来源:互联网 发布:淘宝详情页图片超链接 编辑:程序博客网 时间:2024/05/16 09:02
1、实例化父类时,可以使用new子类,执行构造函数顺序为:先执行父类构造函数,再执行子类构造函数。
2、实例化子类时,只可以new子类,执行顺序同上。
3、父类实例化后,只能执行父类的方法,获得父类的属性等。
4、实例化子类后,可同时执行子类和父类的方法和属性,如同名方法,则执行子类的方法。
我们看以下的代码:
public class A
{
public A(string a) { }
}
public class B:A
{
public B() { }
}
这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' arguments ,中文意思类A没有包含无参构造函数。按照提示,添加了无参构造函数,问题解决了。
那么为什么会这样呢,我们知道,子类在创建对象执行构造函数之前会先执行父类的构造函数,那么假如父类中有多个构造函数,又是执行哪个呢,这时候base这个关键字我想可以来说明一切。还是看代码吧:
public class A
{
public A() { }
public A(string a) { }
}
public class B:A
{
public B():base()
{ }
}
在A中添加了无参构造函数,然后在B中修改了这句:pubic B():base(){},然后我们测试下,创建一个B对象,在A类中的2个构造函数中设置断点,发现无参构造函数执行了,我想正是因为这个base在这里发挥了作用,是base()指向了父类的无参构造函数。其实,在类B中,我们完全可以省略 base(),也能正常运行,
第一段代码中提示的错误的原因是A类中没有无参的构造函数,这样在执行B中的构造函数的时候,就没法执行A中的无参构造函数了。 下面我在写一段不使用无参构造函数的代码,看了会更加清晰:
public class A
{
public A(string a)
{
//
}
}
public class B:A
{
public B(string a):base(a)
{
//
}
}B中的构造函数指定了调用父类的A(string a)构造函数。这样我们创建B对象在执行构造函数前就会执行父类中对应的指定的构造函数了
- C#继承与构造函数的调用
- C#构造函数的声明、重载与继承调用
- 继承与构造函数的调用
- C#继承|继承中构造函数的调用
- C#类的继承,构造函数实现及其调用顺序
- C#类的继承,构造函数实现及其调用顺序
- C++杂记:继承与构造函数的调用
- 关于继承的构造,函数的调用
- C#构造函数继承
- C#构造函数继承
- Java继承时构造函数的调用
- Java继承时构造函数的调用
- 单继承,构造函数的调用次序
- Java继承时构造函数的调用
- java继承的构造函数调用顺序
- Java继承关系构造函数的调用
- java继承中构造函数的调用
- C#静态构造函数,在继承中调用情况
- 自开发程序里使用Badi小结
- C#构造函数在继承过程中的执行顺序
- 堆和栈的区别 4
- C#继承的特性
- 堆和栈的区别 5
- C#继承与构造函数的调用
- Java web开发详解读书笔记-第八章数据库访问
- C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?
- Introduction to XML and XML With Java
- PKG_CONFIG_PATH 的使用
- 默认构造函数的作用(“A”方法没有采用“0”个参数的重载。)
- 22+1条经典的编程引言
- asp.net 将EXCEL表格数据导入到SQL Server数据库
- C#继承中访问修饰符的区别