第三版中第9章P176-P177页,讲述了实例化派生类后,调用构造器的步骤;
e.g:
    public class A
    { 
        public A()
        {
            Console.WriteLine("A无参");
        }        public A(int i)
        {
            Console.WriteLine("A有参");
        }
    }    public class B : A
    {
        public B()
        {
            Console.WriteLine("B无参");
        }        public B(int i) : base(i)
        {
            Console.WriteLine("B有参");
        }
    }
    
    
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B(222);
            Console.ReadKey();
        }
    }
按照书上所说,应该是先调用System.Object.Object()构造函数
              然后应该调用A.A(int i)构造函数;
              最后应该调用B.B(int i)构造函数。
但是我通过程序验证的结果是调用A.A()构造函数,也就是默认构造函数,这是怎么回事,书错了还是什么情况。。

解决方案 »

  1.   

    但是我通过程序验证的结果是调用A.A()构造函数,也就是默认构造函数???你确定?第一步:  public A(int i)
        {
            Console.WriteLine("A有参");
        }第二步: public B(int i)
        {
     Console.WriteLine("B有参");
        }
      

  2.   

    结果是
    A有参
    B有参
    没错啊。你怎么会说是a的默认构造呢
      

  3.   

    代码我自己补充了个东西,汗~~    public class B : A
        {
            public B()
            {
                Console.WriteLine("B无参");
            }        public B(int i) //: base(i)此处应该没有base关键字
            {
                Console.WriteLine("B有参");
            }
        }大家帮我解释下,谢谢啊,看过C#入门经典的
      

  4.   

    如果你去掉:base(i),必定是调用A的默认构造函数...如果书上没有:base(i),却说“然后应该调用A.A(int i)构造函数”,那就是错的...书上有错不稀奇...尽信书不如无书...