c# 構造函數初探

        

類的構造函數 

   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 帶一個參數的構造函數

  構造函數技巧

    我的體會是在有參構造函數的類中,最好把無參的構造函數

    也手工寫上.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章