




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C#構造函數詳解1、構造函數的名字與類名相同。
2、使用new表達式創建類的對象或者結構(例如int)時,會調用其構造函數。并且通常初始化新對象的數據成員。
3、除非類是靜態的,否則會為沒有構造函數的類,自動生成一個默認構造函數,并使用默認值來初始化對象字段。
4、構造函數可以有參數,可以以多態的形式存在多個構造函數。
代碼:
classCoOrds
publicintx,y;
//實例構造函數(默認構造函數)
publicCoOrds()
x=0;
y=0;
//具有兩個參數的構造函數
publicCoOrds(intx,inty)
this.x=x;
this.y=y;
//重寫toString方法
publicoverridestringToString()
return(String.Format("({0},{1})",x,y));
staticvoidMain(string[]args)
CoOrdsp1=newCoOrds();//調用默認的無參構造函數
CoOrdsp2=newCoOrds(5,3);//調用兩個參數構造函數
//使用重寫ToString方法顯示結果
Console.WriteLine("CoOrds#1at{0}",p1);
Console.WriteLine("CoOrds#2at{0}",p2);
Console.ReadKey();
/*Output:
CoOrds#1at(0,0)
CoOrds#2at(5,3)
*/
分析:
1.其中CoOrds()是構造函數,諸如此類不帶參數的構造函數稱為默認構造函數。
2.CoOrds(intx,inty)同樣也是構造函數,構造函數可以有參數,允許多態。
三、靜態構造函數
1.靜態構造函數不使用訪問修飾符或不具有參數。
2.在創建第一個實例或引用任何靜態成員之前,將自動調用靜態構造函數以初始化類。
3.不能直接調用靜態構造函數。
4.用戶無法控制在程序中執行靜態構造函數的時間。
5.靜態構造函數的一種典型用法是在類使用日志文件且將構造函數用于將條目寫入到此文件中時使用。
6.靜態構造函數對于創建非托管代碼的包裝類也非常有用,這種情況下構造函數可調用LoadLibrary方法。
7.如果靜態構造函數引發異常,運行時將不會再次調用該函數,并且類型在程序運行所在的應用程序域的生存期內將保持未初始化。
classTestClass
publicstaticintx=0;
//構造函數
TestClass()
x=1;
//靜態構造函數
staticTestClass()
{//第二步,執行x=2
x=2;
//第一步,程序入口Main最先執行。然后執行publicstaticintx=0接著執行靜態構造函數。
publicstaticvoidMain(string[]args)
Console.WriteLine("x:{0}",x);//打印,x=2
TestClassTest=newTestClass();//第三步執行構造函數,此時x=1
Console.WriteLine("x:{0}",x);//打印x=1
Console.Read();
}
分析1:
1.Main是程序入口,當執行Main的時候,最先執行publicstaticintx=0
2.接著執行靜態構造函數,此時x=2
3.然后執行Main函數里面的內容,打印x,此時x=2
4.初始化TestClass,然后會執行構造函數,此時x=1
5.打印x=1
publicclassA
publicstaticreadonlyintx;
staticA()
//第二步,調用B.y,此處B.y=0,因為int類型在初始化階段,會給賦默認值,默認值為0。最后x=0+1(返回給第一步)
x=B.y+1;
publicclassB
//第一步,調用A.x,然后執行類A的靜態構造函數,等待返回(第二步返回的A.x=1,所以y=1+1)
publicstaticinty=A.x+1;
publicstaticvoidMain(string[]args)
//第三步,A.x=1,y=2。
Console.WriteLine("x:{0},y:{1}。",A.x,y);
Console.ReadLine();
}
分析2:
1.首先,每一個項目有且只能有一個靜態類的Main函數作為入口函數。而入口函數是最先執行的。
2.由于Main函數在B類里面,首先會初始化B類。而類的初始化順序是:類里的靜態變量,然后執行靜態構造函數。
3.運行起先執行publicstaticinty=A.x+1這個,執行的時候,會先把y初始化為0,然后計算y的值。
4.計算y的值的時候,調用了A的靜態變量x。所以會先初始化A。
5.初始化A時首先去執行publicstaticreadonlyintx,先把x初始化為0。
6.然后執行A的靜態構造函數x=B.y+1此時y已經初始化為0了。
7.計算得到x=1。然后回到publicstaticinty=A.x+1得到y=2。
8.然后再執行Main函數的內容。得出結果x=1,y=2
四、私有構造函數
私有構造函數是一種特殊的實例構造函數。它通常用于只包含靜態成員的類中。如果類具有一個或多個私有構造函數而沒有公共構造函數,則其他類(除嵌套類外)無法創建該類的實例。
代碼:
publicclassPrivateConstructor
privatePrivateConstructor()
//PrivateTesta=newPrivateTest();
//注釋打開會報錯,錯誤信息:不可訪問,因為它受保護級別限制。因為私有構造函數無法在類的外面實例化。
publicclassPrivateTest
inti;
privatePrivateTest()
i=3;
staticvoidMain(string[]args)
PrivateConstructort=newPrivateConstructor();//嵌套類允許實例化。
PrivateTestp=newPrivateTest();//類的內部允許實例化。
Console.WriteLine("i:{0}",p.i);//結果:i:3
Console.Read();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中級會計師考試試卷及答案
- 2025年計算機科學競賽試卷及答案
- 2025年城市規劃專業知識考試題及答案
- 數據分析與處理技術考試試卷及答案2025年
- 民辦學校學生資助與獎學金管理委托合同
- 物流園區設施維護與物業管理一體化合同
- 拆遷安置補償金分配與離婚財產分割及房產分配協議
- 短視頻網紅KOL推廣合作合同
- 高清影視虛擬角色租賃合同及后期特效服務
- 互聯網金融服務用戶隱私權保護與數據安全協議
- 公司樣品承認書
- 壓力容器制造企業常用制造檢測設備
- 護理管理學練習題題
- GB/T 15006-2009彈性合金的尺寸、外形、表面質量、試驗方法和檢驗規則的一般規定
- 《小區植物景觀調查報告【論文】》
- 立式加工中心操作指導書
- 護理管理與創新課件
- 計算機網絡管理員(三級)理論鑒定試題A-含答案
- 舉升機每日維護檢查表
- 暖通畢業設計外文翻譯
- 老年人的體重控制
評論
0/150
提交評論