以下代码是《Visual C#入门经典》中第175页中的一个实例:public class MyBaseClass
  {
      public MyBaseClass()
        {
        }
      public MyBaseClass(int i)
        {
        }
  }public class MyDerivedClass:MyBaseClass
  {   
      public MyDerivedClass():this(5,6)
        {
        }      public MyDerivedClass(int i)
        {
        }      public MyDerivedClass(int i,int j):base(i)
        {
        }
  }------
以下面方式实例化MyDerivedClass:
MyDerivedClass myobj = new MyDerivedClass();
------·请长者们说一下这代码的执行顺序,和什么会这么执行?

解决方案 »

  1.   

    MyDerivedClass myobj = new MyDerivedClass();public MyDerivedClass():this(5,6)
    public MyDerivedClass(int i,int j):base(i)
    public MyBaseClass(int i)
      

  2.   

    执行顺序应该是:
    MyBaseClass(int i)->MyDerivedClass(int i,int j):base(i)->MyDerivedClass():this(5,6)
      

  3.   

    public MyDerivedClass():this(5,6)
    public MyDerivedClass(int i,int j):base(i)
     public MyBaseClass(int i)
    public MyBaseClass()去看一下base,这就是调用基类的构造函数
      

  4.   

    public MyDerivedClass():this(5,6)
    public MyDerivedClass(int i,int j):base(i)
     public MyBaseClass(int i)
    public MyBaseClass()就是这样的~
      

  5.   

    首先是调用默认的无参数构造函数,然后无参数构造函数调用子类本身的双参数构造函数,
    最后调用基类的单参数构造函数。
    这里的this指代类本身,base指代类的基类。
      

  6.   

    执行顺序应该是:
    MyBaseClass(int i)->MyDerivedClass(int i,int j):base(i)->MyDerivedClass():this(5,6)
      

  7.   

    ·多谢大家的热心关注!但是我想要的不仅是结果,还想知道为什么会这样!
    ------
    以下是书上的答案,请长者们耐心的为我解释一下?System.Object.Object()
    MyBaseClass.MyBaseClass(int i)
    MyDerivedClass.MyDerivedClass(int i,int j)
    MyDerivedClass.MyDerivedClass()
      

  8.   

    MyDerivedClass myobj = new MyDerivedClass();这句执行时,就会调用MyDerivedClass类的构造函数,但是MyDerivedClass类有3个构造函数,这里就产生重载了,因为没有带参数构造,所以就是调用它的无参构造函数MyDerivedClass(),但是MyDerivedClass()又是通过MyDerivedClass类的另一个含参构造函数MyDerivedClass(int i,int j)来构造的,所以在执行MyDerivedClass():this(5,6)前必须先执行MyDerivedClass类的另一个含参构造函数MyDerivedClass(int i,int j),而MyDerivedClass(int i,int j)又是通过基类的含参构造函数MyBaseClass(int i)来构造的,很显然一切对象的构造都执行了System.Object.Object();根据构造函数构造的次序规则,从最底层的类开始构造,不难得出,这里的执行顺序是:
    System.Object.Object()->MyBaseClass(int i)->MyDerivedClass(int i,int j):base(i)->MyDerivedClass():this(5,6)这里还有一个知识点,就是重载的运用。
      

  9.   

    MyBaseClass(int i)
    MyDerivedClass(int i,int j):base(i)
    MyDerivedClass()
      

  10.   

    ·实例化应该用下面的代码,这是我没有说清楚的地方有劳大家重解一下!
    MyDerivedClass myobj = new MyDerivedClass(4,8);
      

  11.   

    ·谢谢  jxufewbt 您的关注,但是我刚才又将实例化的代码改为了:
    MyDerivedClass myobj = new MyDerivedClass(4,8);
    ---
    根据上述实例化的方法,请您重解一下执行的过程,书中对 base 和 this 关键字的解释有些模糊希望您能结合这个例子,阐述一下!有劳您了~
      

  12.   

    执行new MyDerivedClass()和new MyDerivedClass(4,8)都会调用:public MyDerivedClass(int i,int j):base(i)
    因为:base(i),会先调用MyBaseClass的public MyBaseClass(int i),然后执行public MyDerivedClass(int i,int j)中的代码.
    至于为什么这么执行,你去问微软的程序员吧!this是调用自己的构造函数,BASE是调用基类的构造函数
      

  13.   

    MyBaseClass(int i)->MyDerivedClass(int i,int j)->MyDerivedClass()