了解建構函式

2021-09-03 10:20:03 字數 2516 閱讀 6218

私有建構函式

如果乙個類裡面有私有建構函式,則該類不能以這種建構函式來初始化,通常只能呼叫它的靜態方法。單例模式中比較常用。

如果乙個類裡面既有私有建構函式,也有公有建構函式,則該類可以被初始化,但僅僅是按照公有建構函式的方式。所以說,類裡面含有私有建構函式,所以類不能被初始化是不嚴謹的。

如果類中的所有方法都是靜態的,可考慮使整個類成為靜態的。

public class father

public father(string a) }

father f = new father();//can't be initialled

father f1 = new father("ww");//ok

protected建構函式

在初始化方面和私有建構函式相同。

public class father

public father(string a) }

father f = new father();//can't be initialled

father f1 = new father("ww");//ok

繼承性

當父類沒有預設建構函式,或者預設建構函式被重寫。子類繼承的時候,要相應的呼叫父類的被重寫的建構函式,不然編譯會出錯。

public class father }

public class son : father }

當父類的建構函式是私有的,子類想要「繼承」該建構函式但卻不能訪問(建構函式不能被繼承,此處的意思為子類初始化的時候,必定要呼叫到父類的建構函式),所以子類就沒法實現繼承了。但子類可以繼承父類中的公有的建構函式。

所以說,對於類中含有私有建構函式,該類不能被繼承的說法是不嚴謹的。嚴謹的說法是,當類中僅有乙個私有建構函式,則該類不能被繼承。若一定要繼承該類,指定繼承父類的乙個公有建構函式,則還是可以被繼承的。

public class father

public father(string a) }

public class son : father

public son(string a):base(a) }

對於類中含有protected建構函式,該類的繼承性不受影響。

public class father

public class son : father

靜態建構函式

靜態建構函式用於初始化任何靜態資料,或用於執行僅需執行一次的特定操作。在建立第乙個例項或引用任何靜態成員之前,將自動呼叫靜態建構函式。

public class father

father f = new father();//print

father f1 = new father();//no print 靜態建構函式已經被呼叫過一次了,不會再次呼叫。

靜態建構函式函式的繼承性體現在如下,當你例項化子類的時候,接下來發生的事情如下:

子類的靜態建構函式=》父類的靜態建構函式=》父類的建構函式=》子類的建構函式。

可以這麼去理解,最新呼叫的是子類的靜態建構函式,然後接下來是子類的建構函式,但是子類的建構函式執行前要先呼叫父類的建構函式,於是,程式去執行父類的建構函式,但是只要你去呼叫父類,肯定會先執行父類的靜態建構函式,除非靜態建構函式已經被執行過一次。所以初始執行的時候就會有如上的序列。

當再次例項化子類,則只剩下:父類的建構函式=》子類的建構函式。

看如下**:

public class father

public father()

public class son : father

public son() }

son s=new son();

son s1 =new son();

執行結果為:

sson

sfather

father

son

-- father

son靜態類

類可以宣告為 static 的,以指示它僅包含靜態成員。不能使用 new關鍵字建立靜態類的例項。靜態類在載入包含該類的程式或命名空間時由 .net framework 公共語言執行庫 (clr) 自動載入。

使用靜態類

它們僅包含靜態成員和靜態方法。

它們不能被例項化。

不能被繼承。

它們不能包含例項建構函式。但是它能有靜態建構函式。

拷貝建構函式

與有些語言不同,c# 不提供複製建構函式。如果您建立了新的物件並希望從現有物件複製值,您必須自行編寫適當的方法。

class person

// instance constructor.

public person(string name, int age)

// get accessor.

public string details }

}class testperson }

了解建構函式(初學者)

主要用於建立物件時初始化物件,即為物件成員變數賦初始值建構函式名必須與其類名稱相同 沒有返回值 建構函式不能被直接呼叫,必須通過new運算子在建立物件時才會自動呼叫 建構函式中的引數列表中的引數可有可無 若類中沒有帶引數的構造器,則可使用預設的無參構造器建立物件,若寫了帶引數的構造器,則原來無參構造...

C 了解建構函式和析構函式

一般來說,每次都是建立乙個物件,再在類的公有函式裡設定資訊,那能不能在建立函式的同時設定資訊呢?建構函式是乙個特殊的成員函式,主要作用是初始化物件的記憶體空間。雖然稱為建構函式,但是其核心並不是開空間建立物件,而是對物件記憶體空間的初始化。1 函式名與類名相同 2 無返回值 3 物件例項化時編譯器自...

一步步了解建構函式

一 關於物件 在了解建構函式之前,我們需要先了解下物件,我們都聽說物件導向程式設計,那麼這當中的物件是什麼,簡單來說,物件是個功能模組,這個功能可以接收資訊,處理資訊和傳送資訊。從我們 的角度看,物件是乙個封裝了屬性和方法的容器,屬性是物件的狀態,方法則是物件的行為 完成某種任務 我們可以用這個物件...