鱼跃千里

 

继承类实例化时构造函数的执行顺序

     最近准备去面试一个实习工作,看了一下<C#入门经典(第三版)>,看到那个构造函数的执行序列(原书176页)就动手试了一下,结果发现了一个问题

    以下摘自书中


 考虑下面的对象结构

Code

     如果以下面的方式实例化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又试了一遍)

 

Code

 

执行结果截图

 

 

看来应该是书上的印刷错误了,莫非还有什么其他的原因?

 

PS:顺便再记一下可以改变实例化执行的构造函数的两个关键字,base,this,用法也很简单,就在构造函数方法签名后面加":base(int i)"这样类似的语句,就会去执行它父类中有相同签名的构造函数.

posted on 2008-08-21 11:32  鱼跃千里  阅读(2038)  评论(4编辑  收藏  举报

导航