类的构造函数 

   1.默认的构造函数 (无参)

   2.用户自定义构造函数 (可有可无参数)

   

   构造函数的继承机制

    从两个方面来阐述这个问题:

一,基类中没有定义构造函数(默认的构造函数)

   当子类继承基类的时候,会默认调用基类的构造函数

从最亲近的一级往顶级查找

demo -01

 class baseClass

         { }

        class drivedClass :baseClass

       {

        public drivedClass()

        {

            Console.WriteLine("drivedClass 默认构造函数");

        }

        public drivedClass(int i)

        {

            Console.WriteLine("drivedClass 带一个参数的构造函数");

        }

       }

         drivedClass dc = new drivedClass();

         Console.ReadLine();

 

      结果:

 drivedClass 默认构造函数

 

   二,基类中有自定义的构造函数

这个情况比较复杂,我一一举例来说明

 当基类中只声明无参数的构造函数

     (无参构造函数只能有一个,多了会报错)

    子类中将只调用基类中无参构造函数

    demo -02

     class baseClass

       {

        

        public baseClass()

        {

            Console.WriteLine("baseClass 默认构造函数");

        }

         

      }

    class drivedClass :baseClass

    {

  //base 的意思是调用基类的构造函数,当基类无参数时,base可有可无

        public drivedClass():base()

        {

            Console.WriteLine("drivedClass 默认构造函数");

        }

        public drivedClass(int i)

        {

            Console.WriteLine("drivedClass 带一个参数的构造函数");

        }

        public drivedClass(int i, int j)

        {

            Console.WriteLine("drivedClass 带二个参数的构造函数");

        }

     }

     drivedClass dc = new drivedClass();

     Console.ReadLine();

     结果

baseClass 默认构造函数

drivedClass 默认构造函数

  当基类中既有无参构造函数,又有参数的构造函数时

   就要看子类是怎么调用构造函数的

   demo -03

   带参数的构造函数 

  class baseClass

    {

        

        public baseClass()

        {

            Console.WriteLine("baseClass 默认构造函数");

        }

         

        public baseClass(int i)

        {

            Console.WriteLine("baseClass 带一个参数的构造函数");

        }

         

    }

    class drivedClass :baseClass

    {

       

        public drivedClass()

        {

            Console.WriteLine("drivedClass 默认构造函数");

        }

        public drivedClass(int i) :base(i)

        {

            Console.WriteLine("drivedClass 带一个参数的构造函数");

        }

        public drivedClass(int i, int j)

        {

            Console.WriteLine("drivedClass 带二个参数的构造函数");

        }

    }

      drivedClass dc = new drivedClass(1);

       Console.ReadLine();

   结果

    baseClass 带一个参数的构造函数

    drivedClass 带一个参数的构造函数

  构造函数技巧

    我的体会是在有参构造函数的类中,最好把无参的构造函数

    也手工写上.