继承类实例化时构造函数的执行顺序
最近准备去面试一个实习工作,看了一下<C#入门经典(第三版)>,看到那个构造函数的执行序列(原书176页)就动手试了一下,结果发现了一个问题
以下摘自书中
考虑下面的对象结构
如果以下面的方式实例化MyDerivedClass
MyDerivedClass myObj=new MyDerivedClass();
则事件的顺序如下
1.执行System.Object.Object()构造函数;
2.执行MyBaseClass.MyBaseClass()构造函数;
3.执行MyDerivedClass.MyDerivedClass()构造函数;
如果以下面的方式实例化MyDerivedClass
MyDerivedClass myObj=new MyDerivedClass(4);
则事件的顺序如下
1.执行System.Object.Object()构造函数;
2.执行MyBaseClass.MyBaseClass(int i)构造函数;
3.执行MyDerivedClass.MyDerivedClass(int i)构造函数;
如果以下面的方式实例化MyDerivedClass
MyDerivedClass myObj=new MyDerivedClass(4,8);
则事件的顺序如下
1.执行System.Object.Object()构造函数;
2.执行MyBaseClass.MyBaseClass()构造函数;
3.执行MyDerivedClass.MyDerivedClass(int i, int j)构造函数;
注意上面的红色部分,为什么会这样执行呢,我自己做了一下实验,发现不是这样执行的
事件的顺序如下
1.执行System.Object.Object()构造函数;
2.执行MyBaseClass.MyBaseClass()构造函数;
3.执行MyDerivedClass.MyDerivedClass(int i)构造函数;
看看我的代码(用vs2008,为了排除是不是由于.net 3.5的原因,我特意换vs05又试了一遍)
执行结果截图
看来应该是书上的印刷错误了,莫非还有什么其他的原因?
PS:顺便再记一下可以改变实例化执行的构造函数的两个关键字,base,this,用法也很简单,就在构造函数方法签名后面加":base(int i)"这样类似的语句,就会去执行它父类中有相同签名的构造函数.