C#建構函式

來源:互聯網
上載者:User

標籤:

 

一、C#建構函式?Construct,Function

建構函式是一種特殊的成員函數,它主要用於為對象分配儲存空間,對資料成員進行初始化.

建構函式具有一些特殊的性質:

(1)建構函式的名字必須與類同名;

(2)建構函式沒有傳回型別,它可以帶參數,也可以不帶參數;

(3)聲明類對象時,系統自動調用建構函式,建構函式不能被顯式調用;

(4)建構函式可以重載,從而提供初始化類對象的不同方法;

(5)若在聲明時未定義建構函式,系統會自動產生預設的建構函式,此時建構函式的函數體為空白.如果定義了建構函式,則不會添加預設建構函式。

(6)靜態建構函式,用static修飾,用於初始化靜態變數,一個類只允許有一個建構函式,在類執行個體化時載入,這時修飾符public、private失去作用.

(7)可以使用public、protected、private修飾符。.

(8)引用父類構造時用():base()方法,引用自身重載的構造使用():this(int para).

(7)可以使用public、protected、private修飾符。

(9)建構函式不會被繼承。。執行順序:如果有該建構函式,則從頂級父類開始往下執行。注意如果建構函式有參數,這是需要使用base向父類傳參數才可以。

 

 

二、C#建構函式的結構層次關係或者說執行順序是怎樣的?Layer,Transfer,Execute

從基類開始構造對象。

 


public class MyBaseClass
    {
        public MyBaseClass()
        {
            Console.WriteLine("In MyBaseClass()");
        }
        public MyBaseClass(int i)
        {
            Console.WriteLine("In MyBaseClass(int i)");
        }
    }
    public class MyDerivedClass : MyBaseClass
    {
        public MyDerivedClass()
        {
            Console.WriteLine("In MyDerivedClass()");
        }
        public MyDerivedClass(int i)
        {
            Console.WriteLine("In MyDerivedClass(int i)");
        }
        //public MyDerivedClass(int i, int j)
        //{
        //    Console.WriteLine("In MyDerivedClass(int i,int j)");
        //}
        public MyDerivedClass(int i, int j)
            : base(i)
        {
            Console.WriteLine("In MyDerivedClass(int i,int j):base(i)");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //Event1
            MyDerivedClass myObj1 = new MyDerivedClass();
            Console.WriteLine();
            //Event2
            MyDerivedClass myObj2 = new MyDerivedClass(4);
            Console.WriteLine();
            //Event3
            MyDerivedClass myObj3 = new MyDerivedClass(4,8);
            Console.WriteLine();
            Console.ReadKey();
        }
    }

 

程式輸出:

 

In MyBaseClass()

In MyDerivedClass()

 

In MyBaseClass()

In MyDerivedClass(int i)

 

In MyBaseClass(int i)

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

很明顯,只有在用base顯示調用父類的建構函式時,程式才不會預設的調用不帶參數的建構函式。

 

 =======附加============

<靜態建構函式>

  靜態建構函式是實現對一個類進行初始化的方法成員。它一般用於對待用資料的初始化。靜態建構函式不能有參數,不能有修飾符而且不能被調用,當類被載入時,類的靜態建構函式自動被調用。如:

using System.Data;
class Employee
{
 private static DataSet ds;
 static Employee()
 {
  ds = new DataSet(...);
 }
 ...
}

  聲明了一個有靜態建構函式的類Employee。注意靜態建構函式只能對待用資料成員進行初始化,而不能對非待用資料成員進行初始化。但是,非靜態建構函式既可以對待用資料成員賦值,也可以對非待用資料成員進行初始化。

  如果類僅包含靜態成員,你可以建立一個private的建構函式:private TestClass() {…},但是private意味著從類的外面不可能訪問該建構函式。所以,它不能被調用,且沒有對象可以被該類定義執行個體化。

 

=======附加2======

<基類和衍生類別的建構函式的使用方式>

 當建立衍生類別的對象時,系統將會調用基類的建構函式和衍生類別的建構函式,構 造函數的執行次序是:先執行基類的建構函式,再執行衍生類別的建構函式。如果衍生類別又有對象成員,則,先執行基類的建構函式,再執行成員對象類的建構函式,最後執行衍生類別的建構函式。

  至於執行基類的什麼建構函式,預設情況下是執行基類的無參建構函式,如果要執行基類的有參建構函式,則必須在衍生類別建構函式的成員初始化表中指出。如:

class A
{ private int x;
 public A( ) { x = 0; }
 public A( int i ) { x = i; }
};

class B : A
{ private int y;
 public B( ) { y = 0; }
 public B( int i ) { y = i; }
 public B( int i, int j ):A(i) { y = j; }
};

B b1 = new B(); //執行基類A的建構函式A(),再執行衍生類別的建構函式B()
B b2 = new B(1); //執行基類A的建構函式A(),再執行衍生類別的建構函式B(int)
B b3 = new B(0,1); //執行執行基類A的建構函式A(int) ,再執行衍生類別的 

  建構函式B(int,int)

  在這裡建構函式的執行次序是一定要分析清楚的。另外,如果基類A中沒有提供無參建構函式public A( ) { x = 0; },則在衍生類別的所有建構函式成員初始化表中必須指出基類A的有參建構函式A(i),如下所示:

class A
{ private int x;
 public A( int i ) { x = i; }
};

class B : A
{ private int y;
 public B():A(i) { y = 0; }
 public B(int i):A(i) { y = i; }
 public B(int i, int j):A(i) { y = j; }
};

C#建構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.