我有一个基类和派生类。如果我创建派生类的对象,哪个构造函数将首先被采用:基础构造函数还是派生构造函数?调用基类和派生构造函数的顺序
回答
实例构造函数按相反顺序初始化。基础构造函数将首先被初始化,然后被派生的构造函数。
采取这里http://www.csharp411.com/c-object-initialization/
看看有顺序的一个很好的概述中对象的字段和构造函数初始化:
- 派生静态字段
- 衍生静态构造函数
- 派生实例字段
- 基本静态字段
- 基地静态构造函数
- 基础实例字段
- 基地实例构造
- Derived实例构造
第一称为base class
构造
class Base
{
public Base()
{
Console.WriteLine("Base");
}
}
class Derived : Base
{
public Derived()
{
Console.WriteLine("Derived");
}
}
class Program
{
static void Main()
{
Derived d = new Derived();
}
}
输出将是
Base
Derived
嗨anishmarokey你能解释如何和为什么?我是新来的这个概念 – selvaraj 2010-08-31 07:10:25
首先基座c'tor将运行,然后推导出的一个。
基础构造函数将首先被调用。
尝试:
public class MyBase
{
public MyBase()
{
Console.WriteLine("MyBase");
}
}
public class MyDerived : MyBase
{
public MyDerived():base()
{
Console.WriteLine("MyDerived");
}
}
检查这个环节太了解详细信息 - http://www.csharp-station.com/Tutorials/lesson08.aspx
基类的构造函数将首先处理,然后每一个派生的构造函数。
*编辑添加以下代码* 您可以通过创建一个ClassOne对象,并使用调试看到这个“步入”在以下方面:
class BaseClass
{
public BaseClass(int num)
{
this.fieldNumber = num;
}
private int fieldNumber;
}
class ClassOne : BaseClass
{
public ClassOne(int num1, int num2): base(num1)
{
this.fieldNumber = num2;
}
private int fieldNumber;
}
基类的构造首先调用。这很容易验证:
class Program
{
class Base
{
public Base()
{
Console.WriteLine("base ctor");
}
}
class Derived : Base
{
public Derived()
{
Console.WriteLine("derived ctor");
}
}
static void Main()
{
new Derived();
}
}
嗨达林你能解释如何和为什么?我是新来的这个概念 – selvaraj 2010-08-31 07:09:53
基础对象首先构造自己是否有意义? – 2010-08-31 07:25:12
假设你的代码是这样的:
class Foo
{
public Foo()
{}
}
class Bar : Foo
{
public Bar() : base()
{}
}
然后调用的Bar
构造函数将运行首先是Foo
的构造函数。
首先调用基类构造函数。
举例来说,如果你有这些类:如果你创建类B
,它会先输出“A”,然后是“B”的一个实例
public class A {
public A() {
Console.WriteLine("a");
}
}
public class B : A {
public B() {
Console.WriteLine("b");
}
}
。
以面值(即没有代码)的问题,然后,基类构造函数首先运行。通过这种方式,可以首先初始化基类 - 派生类可能取决于正在初始化的基类中的对象。
如果有两个或更多级别的继承,那么首先调用最不专业的构造函数。
- 1. 在C++中调用的基类和派生类构造函数
- 2. 关于基类和派生类的构造函数调用
- 3. 基类构造函数在派生类构造函数之前真的调用
- 4. 从调用派生类的基类构造函数在Java中
- 5. 派生类调用错误的基类构造函数
- 6. C# - 使所有派生类调用基类构造函数
- 7. 在派生类中调用基类构造函数
- 8. 从派生构造函数调用基类方法
- 9. 构造函数在Java派生类中执行的顺序
- 10. 在派生类的函数中调用基类的构造函数
- 11. C#继承:当我调用派生类构造函数时如何调用基类构造函数
- 12. 构造函数在基类和派生类
- 13. 首先调用虚拟基类的构造函数,然后按顺序调用其他类的构造函数
- 14. 基类的构造函数和析构函数是否使用派生函数调用?
- 15. 修改数据后从派生类调用基类的构造函数
- 16. 调用派生类的构造函数在基类的构造函数之前执行
- 17. 如何从无参数派生类调用参数化基类构造函数?
- 18. 成员构造函数和析构函数调用的顺序
- 19. 派生类的构造函数(Java)
- 20. 从模板派生类调用模板基类的构造函数
- 21. 如何从派生类的实例调用基类非默认构造函数?
- 22. 派生类的构造函数以基类对象
- 23. 如何从派生自不同基类的类的构造函数中调用不同的派生类
- 24. 调用构造函数的顺序
- 25. 调用从基类派生的类的构造
- 26. 如何强制在派生类中调用基类构造函数?
- 27. 将派生类构造函数分配给基类指针
- 28. 无法从派生类中调用基类的构造
- 29. 如果派生类没有参数化构造函数,我该如何从派生类调用基类的参数化构造函数?
- 30. 如果基类构造函数不是constexpr,我可以构造派生类constexpr的构造函数吗?
我们在这里可能需要一些代码。 – 2010-08-31 07:00:38