Effective C 使用建構函式初始化語句

2022-02-19 08:46:36 字數 1532 閱讀 7120

在寫程式的時候,往往會出現為乙個型別提供不同場景的建構函式,可能大多建構函式比較相似,而

c#中又不允許預設引數,因此建構函式的編寫無疑是乙個重複工作。但是使用

copy

和paste

來完成建構函式的編寫,有時候很難達到統一,尤其是當成員發生變化的時候。因此比較常見的替換方法就是為建構函式提供乙個統一的成員函式來完成初始化工作。

例如:public

class myclass

public myclass( string name, int age )

//////

init class members

//////

///private

void initmember( string name, int age )

}不過,在

c#中提供了更為簡明的方法,就是在建構函式初始化語句中呼叫另一建構函式,那麼上面的形式可以改寫為如下這樣。

public

class myclass

public myclass( string name, int age )

}對於這兩者來說,執行效率沒有太大差別,但從**質量而言,後者要好很多,而且會使**看起來更清晰。

其次,對於基類的呼叫。由於成員函式不能呼叫基類的建構函式,所以對於第一種編寫就比較困難,後者就簡單多了。

例如:public

class myclass:baseclass

public myclass( string name, int age ):base( name, age )

}這裡要提的一點就是建構函式初始化語句,對於「

this

」或者「

base

」之類的呼叫只能有乙個,不能並存。

最後,就是對於

readonly

常量的初始化,由於

readonly

常量只能通過成員初始化語句或者在建構函式中被修改,因此在成員函式中無法修改

readonly

常量,這也是建構函式初始化語句要比成員函式好的重要乙個因素。

有了上面的說明,對於兩者的對比,可以形成如下這個簡單的對比表。

效率

**結構

基類呼叫

靜態成員初始化

建構函式初始化語句

一樣

簡明清晰

容易

可以

成員函式

比較清晰

比較麻煩

不能(注:這裡不提倡

copy/paste

方法來重複編寫建構函式)

Effective C 原則14 使用建構函式鏈

effective c 原則14 使用建構函式鏈 item 14 utilize constructor chaining 寫建構函式是乙個反覆的工作。很多開發人員都是先寫乙個建構函式,然後複製貼上到其它的建構函式裡,以此來滿足類的一些過載介面。希望你不是這樣做的,如果是的,就此停止吧。有經驗的c ...

Effective C 之構造,拷貝函式

3.條款之不使用預設生成的函式,應該明確拒絕 我們知道c 類會幫我們自動生成建構函式,析構函式函式,拷貝建構函式,和賦值函式 include using namespace std class homeclass int main int argc,char argv 以下 是可以通過,也符合c 準...

關於建構函式的介紹(四) 使用預設引數的建構函式

有預設引數的建構函式 建構函式中引數的值既可以通過實參傳遞,也可以指定為某些預設值,即如果使用者不指定實參值,編譯系統就使形參的值為預設值。一般來說在類中宣告建構函式的時候,給那些帶有形參的變數直接賦予初值,之後,再在類外進行具體函式體的編寫。或者直接在類中進行定義建構函式的的時候,給形參變數指定數...