派生类的构造函数 与基类的调用关系
2010-07-12 14:05
309 查看
基类的构造函数不能被继承,但可以在派生类中的构造函数调用,通过base()调用
看代码说问题吧。
public class A
{
public A(string a) { }
}
public class B:A
{
public B() { }
}
这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' arguments ,中文意思类A没有包含无参构造函数。按照提示,我在类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中的无参构造函数了。 下面我在写一段不使用无参构造函数的代码,看了会更加清晰:
Code
public class A
{
public A(string a)
{
//
}
}
public class B:A
{
public B(string a):base(a)
{
//
}
}
B中的构造函数指定了调用父类的A(string a)构造函数。这样我们创建B对象在执行构造函数前就会执行父类中对应的指定的构造函数了。
看代码说问题吧。
public class A
{
public A(string a) { }
}
public class B:A
{
public B() { }
}
这段代码编译后,会有个错误提示:A does not contain a constructor that takes '0' arguments ,中文意思类A没有包含无参构造函数。按照提示,我在类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中的无参构造函数了。 下面我在写一段不使用无参构造函数的代码,看了会更加清晰:
Code
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++学习笔记(5)——基类、派生类的构造函数、析构函数的调用顺序
- 关于C#中派生类调用基类构造函数的理解[转]
- 【C++】基类和派生类构造函数的调用顺序
- 关于C#中派生类调用基类构造函数的理解[转]
- 关于C#派生类调用基类构造函数的理解
- 派生类中调用基类的构造函数
- 第11周任务3 基类构造函数在派生类中调用
- 基类和派生类的关系以及调用范围
- 构造函数访问权限和基类构造函数,派生类的构造函数调用顺序
- 关于C#中派生类调用基类构造函数的理解 base使用
- c++,派生类无法调用基类构造函数
- 关于派生类构造函数与基类构造函数的调用顺序问题
- 转 关于C#中派生类调用基类构造函数的理解
- C++如何在派生类成员函数内调用基类的成员函数(包括构造函数)
- 基类和派生类的构造函数,隐式调用与显式调用
- 派生类的构造函数显示调用虚基类的构造函数
- 基类与派生类的构造函数调用问题
- 如何指定在创建派生类实例时调用的基类构造函数