# C# 学习笔记(4) 类
C# 學習筆記(4) 類
面向?qū)ο缶幊讨饕菫榱藢懗鲆粋€通用的代碼,屏蔽差異,方便開發(fā)大型項目。類就是面向?qū)ο缶幊痰暮诵闹弧:虲語言的結(jié)構(gòu)體相比,結(jié)構(gòu)體擁有的功能,類統(tǒng)統(tǒng)都有,除此之外,類還有許多新特性。
類的構(gòu)成
[其他修飾符] [訪問修飾符] class 類名 {字段;屬性;方法;構(gòu)造函數(shù);析構(gòu)函數(shù); }字段
存放類的私有數(shù)據(jù),通常只能被類的屬性訪問。
屬性
保護字段,對字段的賦值和取值進行限定。例如有一個學生類,類中有成績這個字段,類外只可以獲取到成績的等級–優(yōu)良中差,這時就可以給這個字段加上一個屬性,通過訪問屬性間接訪問成績字段。為了保證程序封裝性,類外一般是不允許訪問類內(nèi)的字段的,一般字段和屬性是成對出現(xiàn)的。
public class Student{int _Score; //成績字段public string Score //成績屬性{get { if(_Score < 60){return "差";}else if(_Score < 80){return "中";}else if(_Score < 90){return "良";}else{return "優(yōu)";}}set { _Score = int.Parse(value); }}}屬性的本質(zhì)就是兩個方法,一個叫g(shù)et()一個叫set()。
既有g(shù)et()也有set()我們誠之為可讀可寫屬性。
只有g(shù)et()沒有set()我們稱之為只讀屬性
沒有g(shù)et()只有set()我們稱之為只寫屬性
方法
方法也就是C語言中的函數(shù),面向?qū)ο罄锩娼蟹椒ā?/p>
- C語言中,函數(shù)名字不能重復,而C#中允許方法名重復(方法重載),不過要求方法參數(shù)要么個數(shù)不同,要么類型不同。
構(gòu)造函數(shù)
作用:幫助我們初始化對象(給對象的屬性賦值)
構(gòu)造函數(shù)是一個特殊的方法:
1)、構(gòu)造函數(shù)沒有返回值,連void也不能寫。
2)、構(gòu)造函數(shù)的名稱必須跟類名一樣。
- 創(chuàng)建對象的時候會執(zhí)行構(gòu)造函數(shù)
- 構(gòu)造函數(shù)是可以有重載的。
類當中會有一個默認的無參數(shù)的構(gòu)造函數(shù),當你寫一個新的構(gòu)造函數(shù)之后,不管是有參數(shù)的還是
無參數(shù)的,那個默認的無參數(shù)的構(gòu)造函數(shù)都被干掉了。
析構(gòu)函數(shù)
作用:析構(gòu)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當對象脫離其作用域時(例如對象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來做“清理善后” 的工作(例如在建立對象時用new開辟了一片內(nèi)存空間,應(yīng)在退出前在析構(gòu)函數(shù)中用delete釋放)。
- 區(qū)別于構(gòu)造函數(shù)。它不能帶任何參數(shù),也沒有返回值(包括void類型)。只能有一個析構(gòu)函數(shù),不能重載。如果用戶沒有編寫析構(gòu)函數(shù),編譯系統(tǒng)會自動生成一個缺省的析構(gòu)函數(shù),它也不進行任何操作。
析構(gòu)函數(shù)是一個特殊的方法:
1)、析構(gòu)函數(shù)不能被繼承或重載。
2)、析構(gòu)函數(shù)不能被用戶調(diào)用。
3)、析構(gòu)函數(shù)不能帶修飾或參數(shù)。
4)、如果沒有析構(gòu)函數(shù)系統(tǒng)會自動生成一個空的析構(gòu)函數(shù),對象使用的資源將有由GC Garbage Collection垃圾回收器回收(如果用戶想要自己釋放資源,則要自行 編寫析構(gòu)函數(shù))
修飾符
訪問修飾符
- public :公開的公共的
- private:私有的,只能在當前類的內(nèi)部訪問
- protected:受保護的,只能在當前類的內(nèi)部以及該類的子類中訪問。
- internal:只能在當前項目中訪問。在同一個項目中,internal和public的權(quán)限是一樣。
- protected internal:protected+internal
1)、能夠修飾類的訪問修飾符只有兩個:public、internal。
2)、在繼承中,當可訪問性不一致時,
子類的訪問權(quán)限不能高于父類的訪問權(quán)限,否則會暴漏父類的成員。
其他修飾符
-
partial部分類
在合作開發(fā)時,一個類可能由多個人寫,每個人都寫在不同的文件中,這時可以使用partial來修飾類,表示當前只是該類的一部分。
-
sealed密封類
丁克,不能被繼承
-
static
靜態(tài)和非靜態(tài)的區(qū)別
1)、在非靜態(tài)類中,既可以有實例成員,也可以有靜態(tài)成員。
2)、在調(diào)用實例成員的時候,需要使用對象名.實例成員;
在調(diào)用靜態(tài)成員的時候,需要使用類名.靜態(tài)成員名;
總結(jié):靜態(tài)成員必須使用類名去調(diào)用,而實例成員使用對象名調(diào)用。
靜態(tài)函數(shù)中,只能訪問靜態(tài)成員,不允許訪問實例成員。
實例函數(shù)中,既可以使用靜態(tài)成員,也可以使用實例成員。
靜態(tài)類中只允許有靜態(tài)成員,不允許出現(xiàn)實例成員。
使用:
1)、如果你想要你的類當做一個"工具類"去使用,這個時候可以考慮將類寫成靜態(tài)的。
2)、靜態(tài)類在整個項目中資源共享。
只有在程序全部結(jié)束之后,靜態(tài)類才會釋放資源。
總結(jié)
以上是生活随笔為你收集整理的# C# 学习笔记(4) 类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c# 学习笔记 (3) 窗体单例模式
- 下一篇: C# 学习笔记(5) 继承