各位大虾:小弟有有个疑问是关于构造函数的事件顺序:如下:
public class Employee
{
    public Employee()
    {
    }
    public Employee(int i)
    {
 
    }
}public class SalesEmployee : Employee
{
    public SalesEmployee()
    { }
    public SalesEmployee(int i)
    {
        int y = i;
    }
}
接着初始化一个对象:SalesEmployee myce1 = new SalesEmployee(5);
调试的时候问题就来了,我看书上是说事件的顺序是:
先执行Employee.Employee(int i)构造函数
接着再执行SalesEmployee.SalesEmployee(int i)构造函数。
可是我调试的时候并不是这样,是先执行Employee.Employee()构造函数(根本没有执行Employee.Employee(int i))
再执行SalesEmployee.SalesEmployee(int i)构造函数。求解释。谢谢

解决方案 »

  1.   

    不用解释,书上说的是错的,从你给的代码来看
    调用new SalesEmployee(5)的执行顺序就是
    Employee()
    SalesEmployee(int i)
    简单解释就是,构造函数的执行顺序是 父->子,析构函数的执行顺序是 子->父
      

  2.   


      public class SalesEmployee : Employee
        {
            public SalesEmployee()
            { }
            public SalesEmployee(int i):base(i)
            {
                int y = i;
            }
        }这样写,应该是你贴错代码了吧,书上不至于反这错误
      

  3.   

     
    wddw1986 你好,我也知道,构造函数的执行顺序是 父->子。但是我构造对象的时候是带参数的,那为啥访问父类的时候不是先调用public Employee(int i)这个带参数的构造函数呢?难道带参数的构造函数没有存在的意义?
      

  4.   

    z81434362 你好
    我确定我贴的代码没错,我觉得是书上解释错的,按你贴的代码的顺序是先执行Employee.Employee(int i)构造函数
    接着再执行SalesEmployee.SalesEmployee(int i)构造函数。谢谢了
      

  5.   

    因为不能调用Employee(int i),不能默认Employee(int i)和SalesEmployee(int i)是有关系的,这两个构造方法只是入参一样而已,不能自做聪明的去调用Employee(int i),只能老老实实的去调用Employee()这个构造方法