2010-08-31 109 views
0

我有一个基类和派生类。如果我创建派生类的对象,哪个构造函数将首先被采用:基础构造函数还是派生构造函数?调用基类和派生构造函数的顺序

+0

我们在这里可能需要一些代码。 – 2010-08-31 07:00:38

回答

3

实例构造函数按相反顺序初始化。基础构造函数将首先被初始化,然后被派生的构造函数。

采取这里http://www.csharp411.com/c-object-initialization/

看看有顺序的一个很好的概述中对象的字段和构造函数初始化:

  1. 派生静态字段
  2. 衍生静态构造函数
  3. 派生实例字段
  4. 基本静态字段
  5. 基地静态构造函数
  6. 基础实例字段
  7. 基地实例构造
  8. Derived实例构造
2

第一称为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 
+0

嗨anishmarokey你能解释如何和为什么?我是新来的这个概念 – selvaraj 2010-08-31 07:10:25

1

首先基座c'tor将运行,然后推导出的一个。

0

基础构造函数将首先被调用。

尝试:

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

0

基类的构造函数将首先处理,然后每一个派生的构造函数。

*编辑添加以下代码* 您可以通过创建一个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; 
} 
3

基类的构造首先调用。这很容易验证:

class Program 
{ 
    class Base 
    { 
     public Base() 
     { 
      Console.WriteLine("base ctor"); 
     } 
    } 

    class Derived : Base 
    { 
     public Derived() 
     { 
      Console.WriteLine("derived ctor"); 
     } 
    } 

    static void Main() 
    { 
     new Derived(); 
    } 
} 
+0

嗨达林你能解释如何和为什么?我是新来的这个概念 – selvaraj 2010-08-31 07:09:53

+0

基础对象首先构造自己是否有意义? – 2010-08-31 07:25:12

0

假设你的代码是这样的:

class Foo 
{ 
    public Foo() 
    {} 
} 

class Bar : Foo 
{ 
    public Bar() : base() 
    {} 
} 

然后调用的Bar构造函数将运行首先是Foo的构造函数。

0

首先调用基类构造函数。

举例来说,如果你有这些类:如果你创建类B,它会先输出“A”,然后是“B”的一个实例

public class A { 
    public A() { 
    Console.WriteLine("a"); 
    } 
} 

public class B : A { 
    public B() { 
    Console.WriteLine("b"); 
    } 
} 

2

以面值(即没有代码)的问题,然后,基类构造函数首先运行。通过这种方式,可以首先初始化基类 - 派生类可能取决于正在初始化的基类中的对象。

如果有两个或更多级别的继承,那么首先调用最不专业的构造函数。

相关问题