我有一个基类和派生类。如果我正在创建派生类的对象,将首先采用哪个构造函数:基础构造函数或派生构造函数?
答案 0 :(得分:4)
实例构造函数以相反的顺序初始化。首先初始化基础构造函数,然后是派生的构造函数。
看看http://www.csharp411.com/c-object-initialization/
可以很好地概述对象的字段和构造函数的初始化顺序:
答案 1 :(得分: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();
}
}
答案 2 :(得分: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
答案 3 :(得分:2)
在面值处(即没有代码)处理问题,然后,基类构造函数首先运行。这样可以首先初始化基类 - 派生类可能依赖于初始化的基类中的对象。
如果有两个或更多级别的继承,则首先调用最不专业的构造函数。
答案 4 :(得分:1)
首先,基础c'tor将运行,然后派生一个。
答案 5 :(得分:1)
首先调用基础构造函数。
试一试:
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
答案 6 :(得分:0)
首先处理基类构造函数,然后是每个派生的构造函数。
*编辑添加了以下代码* 您可以通过创建一个ClassOne对象并使用以下的调试“Step Into”来看到这一点:
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;
}
答案 7 :(得分:0)
假设你的代码是这样的:
class Foo
{
public Foo()
{}
}
class Bar : Foo
{
public Bar() : base()
{}
}
然后调用Bar
的构造函数将首先运行Foo
的构造函数。
答案 8 :(得分:0)
首先调用基类构造函数。
例如,如果您有这些类:
public class A {
public A() {
Console.WriteLine("a");
}
}
public class B : A {
public B() {
Console.WriteLine("b");
}
}
如果您创建类B
的实例,它将首先输出“a”,然后输出“b”。