C#继承与构造函数的调用
2012-06-27 09:12
183 查看
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对象在执行构造函数前就会执行父类中对应的指定的构造函数了。
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# 的继承,继承类实例化的时候,会先调用基类的构造函数,然后再调用自己的构造函数,base 的用法,有override和没有override的区别
- C#类的继承,构造函数实现及其调用顺序
- 类继承中构造函数和析构函数的调用
- C#在构造函数中调用构造函数的方法(语法)
- c++中子类的继承和调用父类构造函数的方法——学习c++笔记
- C++中多重继承构造函数调用的先后顺序
- 构造函数的继承--子类不继承父类的构造函数,只能调用
- C++中多个类继承时构造函数与析构函数的调用顺序
- C#类的继承,构造函数实现及其调用顺序
- c# 关于继承类中构造函数的实现
- C#调用API,从Control继承自已生成ComboBox控件!!!!
- DEMO[C#]关于类构造函数的调用顺序的一点补充[针对书C#入门经典所举范例的不足]
- C++继承中构造函数、析构函数调用顺序及虚函数的动态绑定
- c# 静态构造函数与构造函数的调用先后
- 多重继承,虚继承,MI继承中虚继承中构造函数的调用情况
- [Unity&C#&接口]通过接口调用不同类型 物体 的继承了接口的组件
- C#中构造函数不能调用构造函数?
- C#中构造函数不是不能被继承吗?为什么以下的构造函数先执行?