建構函式分為:
1.例項建構函式
2.私有建構函式
3.靜態建構函式
建構函式是一種特殊的方法,主要是為了給初始化物件賦初值。
1.例項建構函式
使用new
表示式建立某個類
的物件時,會使用例項建構函式建立和初始化所有例項成員變數。
public
class
programtest",
j);}static
void
main(
string
args)
結果為:i am programtest,4
在此次實驗中,我們首先定義了乙個私有成員j,經過初始化給他賦了乙個初值4,當我例項化類programtest時,就會執行例項建構函式。
諸如此類不帶引數的建構函式叫「預設建構函式」,如果某個類沒有建構函式,則會自動生成乙個預設建構函式,並使用預設值來初始化物件字段。
public
class
programtest
", j);
}static
void
main(
string
args)
}結果為:i am programtest,
0也可以建立帶有引數的建構函式
public
class
programtest
,j="
,i, j);
}static
void
main(
string
args)
結果為:i am programtest i=1,j=
2那若是乙個類中既有無參建構函式,又有有參建構函式那會怎麼樣呢?
public
class
programtest
", j);
}public
programtest(
inti)
,j="
,i, j);
}static
void
main(
string
args)
結果為:i am programtest 預設建構函式 j=
3i am programtest 有參建構函式 i=1,j=2
可見,若是兩者同時存在,那麼看類例項化時,是怎麼例項的。
2.私有建構函式
私有建構函式是一種特殊的例項建構函式。
它通常用在只包含靜態成員的類中。
如果類具有乙個或多個私有建構函式而沒有公共建構函式,則其他類(除巢狀類外)無法建立該類的例項。
public
class
test
}public
class
programtest
", j);
}static
void
main(
string
args)
}結果:這時你會發現編譯器會提示你,你無法建立test的例項
(即使你在test類中新增乙個靜態成員,結果依然會提示
因為該建構函式受其保護級別的限制而不可訪問)
若是只在自己類裡有私有類呢?
public
class
programtest
", j);
}static
void
main(
string
args)
}結果:i am progranmtest 預設建構函式,j=3
注意,如果您不對建構函式使用訪問修飾符,則在預設情況下它仍為私有建構函式。
但是,通常顯式地使用private
修飾符來清楚地表明該類不能被例項化。
若是乙個類中既有
例項建構函式又有私有建構函式,那麼當例項物件是會怎麼執行呢?
public
class
test
", i);
}public
test(
inti)
", i);}}
public
class
programtest
", i);
}public
test(
inti)
", i);}}
public
class
programtest
}結果:i am test 有參建構函式 i=2
3.靜態建構函式
靜態建構函式用來初始化靜態變數,這個建構函式是屬於類的,而不是屬於哪個例項的。
就是說這個建構函式只會被執行一次。也就是在建立第乙個例項或引用任何靜態成員之前,由.net自動呼叫。
public
class
test
", i);}}
public
class
programtest
}結果為:i am test 預設建構函式 i=1
靜態建構函式的特點:
1.靜態建構函式既沒有訪問修飾符,也沒有引數。
2.在建立第乙個例項或引用任何靜態成員之前,將自動呼叫靜態建構函式來初始化類,也就是無法直接呼叫靜態建構函式,也無法控制什麼時候執行靜態建構函式。
3.乙個類只能有乙個靜態建構函式,最多只能執行一次。
4.靜態建構函式不可以被繼承。
5.如果沒有靜態建構函式,而類中的靜態成員有初始值,那麼編譯器會自動生成預設的靜態建構函式。
如果靜態預設建構函式和公有預設建構函式同時存在,會怎麼樣呢?
public
class
test
", i);
}public
test()
", i);}}
public
class
programtest
}結果:i am test 靜態預設建構函式 i=1
i am test 公有預設建構函式 i=1
如果靜態預設建構函式和公有有參建構函式同時存在,我例項化類讓它呼叫靜態預設建構函式會怎麼樣呢?
public
class
test
", i);
}public
test(
intj)
", j);}}
public
class
programtest
", i);
}public
test(
intj)
", j);}}
public
class
programtest
}結果:i am test 靜態預設建構函式 i=1
i am test 公有有參建構函式 j=2
C 建構函式之預設建構函式
參考部落格 以下內容是在上述博主的部落格中提煉出來的 一 預設建構函式的含義是啥 主要就是 預設建構函式在呼叫的時候不需要顯示傳入實參的建構函式 二 預設的建構函式的分類 1 無參建構函式 就是沒有引數的建構函式 class sample 2 帶有形參,並且帶有預設值的建構函式 class samp...
C 建構函式之委託建構函式
委託建構函式 c 11新標準擴充套件了建構函式初始值的功能,使得我們可以定義所謂的委託建構函式。乙個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程,或者說它把它自己的一些 或者全部 職責委託給了其他建構函式。和其他建構函式一樣,乙個委託建構函式也有乙個成員初始值的列表和乙個函式體。在委...
C 之建構函式
參考 c 程式設計指南 類是否用 static 來修飾,有兩種,一種是用static修飾,一種則不是。對於前者,如果,類提供了乙個無引數的建構函式,那麼new 例項化物件時候,就會呼叫這個無引數的建構函式 也叫預設建構函式 如果,類提供了乙個有引數的建構函式,但是new時候,依然沒有提供引數,那麼情...