首先來了解下建構函式的定義:
c#建構函式是一種特殊的成員函式,它的作用主要用於為物件分配儲存空間,對資料成員進行初始化。
接下來看一下他的語法定義形式:
|訪問修飾符| 識別符號 (|引數列表|) |: base(|引數列表|)| |:this(|引數列表|)|
解釋:識別符號:就是類名,並且必須是類名。
引數列表:就是方法或者函式的引數列表。
base:就是呼叫父類中的建構函式。
this:就是呼叫本身的其他建構函式。
看了上面的定義和語法形式,是不是很簡單大。
建構函式的細則如下:
1、建構函式的名字必須和類的名字相同。
2、建構函式可以使用訪問修飾符。
3、可以呼叫父類中的建構函式。
4、可以呼叫本身的其他建構函式。
5、建構函式沒有返回型別,不可以有返回值。
6、建構函式可以帶引數,也可以不帶引數。
7、建構函式可以過載。主要是根據引數的個數不同而引起的。
8、如果不顯示定義建構函式,則有預設的無參建構函式,此時建構函式的函式體是為空的。
9、靜態建構函式,必須用static修飾,用於初始化靜態變數。乙個類中,只允許有乙個建構函式。
10、如果有靜態建構函式,在例項化時載入,這時修飾符就失去作用了。
11、如果定義了,有引數的建構函式,最好也顯示頂乙個無參的建構函式。
上面說了這麼多,下面看乙個demo
publicclass
base
}public
class
a :base
public a(string info) : base
()
}class
program
}
根據上面的這個demo,輸出的結果會是什麼樣的。這裡就引起了另外乙個問題。那就是子類本身和父類建構函式的構造順序是怎麼樣執行的。
我們來分析一下:
首先呼叫建構函式a()然後呢,因為a()使用了this關鍵字,所以在還沒有進入函式體的是否就呼叫了this(
"hello
")也就是a(string
info)
這時候a(
string
info)建構函式被呼叫,但是由於該建構函式使用了base關鍵字,所以在沒有進入函式體就去呼叫它爸爸建構函式base()咯
然後呼叫完base()就依次的輸出結果咯,整個過程其實就是乙個壓棧然後取棧頂元素的過程
分析過之後,上面的執行結果就是:
爸爸的建構函式被呼叫啦~我是被其他構造函式呼叫的,它發過來字串hello我是可以呼叫基類和我的其他建構函式的類
接下類我們在學習一下 析構函式的用法:
析構函式的作用:垃圾**器,它用來清理物件時呼叫
析構函式的細則:
1、不能有引數
2、不能有任何修飾符而且不能被呼叫,它是自動呼叫的,這是它與建構函式的乙個主要區別。
3、由於析構函式的目的與建構函式的相反,就加字首『~』以示區別。
接下來我們先看下析構函式的用法:
publicclass
base
~base()
}public
class
a :base
public a(string info) : base
()
~a()
}class
program
}
由於析構函式的作用也是銷毀物件的。
我們和dispose和close方法的區別;
說明
析構函式
dispose
close
意義銷毀物件
銷毀物件
關閉物件資源
呼叫方式
不能被顯示呼叫
需要顯示呼叫或者通過using語句呼叫
需要顯示呼叫
呼叫時機
不確定確定
確定--------------------c#物件導向入門級教程--------------------------
C 建構函式,析構函式詳解
目錄 上期了解c 類中有public protected private三種訪問許可權。肯定會有人疑惑,c 為什麼要設定這三個許可權呢 本期內容就是圍繞上面的問題展開說明 開始的文章就提到過,類是 oop 物件導向程式設計的基礎 那麼物件導向程式設計究竟是個什麼東東呢 百科是這樣解釋的 通俗的來說就...
C 建構函式,析構函式,拷貝建構函式詳解
二 建構函式的分類及呼叫 三 拷貝構造函式呼叫時機 四 構造函式呼叫規則 五 深拷貝與淺拷貝 六 類物件作為類成員的呼叫規則 七 靜態成員 c 利用建構函式和析構函式進行物件的初始化和清理,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。物件的初始化和清理工作是編譯器強制要我們做的事情,因...
類的建構函式和析構函式詳解
1.建構函式定義 類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。建構函式主要用於為物件分配空間,進行初始化。2.性質 1 建構函式的名字必須與類名相同 2...