c#构造初始化的顺序浅析
这个很基础的知识,但我至今才意识到它。想想也很失败。
直接上代码:很简单
public class base
{
int i=0;
public base()
{
system.console.writeline("我是基类构造器");
}
}
class program
{
static void main(string[] args)
{
base d = new base();
}
}
对于上面的代码。是先执行构造器,还是先初使化字段 i 变量呢?其实只要意识到这个问题,也就很容易试出来,它应当是先初使化字段 i 变量。
那么现在如果base 派生出一个子类,那它的构造顺序又是怎么样的呢?
/// <summary>
/// 基类
/// </summary>
public class base
{
public int baseint = 100;
public base()
{
system.console.writeline("构造器:我是基类构造器");
}
private class inner
{
public inner()
{
system.console.writeline("字段:我是基类inner");
}
}
/// <summary>
/// 字段初使化
/// </summary>
private inner inner = new inner();
}
/// <summary>
/// 子类
/// </summary>
class derived : base
{
public derived()
{
system.console.writeline("构造器:我是子类构造器");
}
private class inner
{
public inner()
{
system.console.writeline("字段:我是子类inner");
}
}
/// <summary>
/// 字段初使化
/// </summary>
private inner inner = new inner();
}
所以说它的执行顺序为:子类字段-父类字段-父类构造器-子类构造器