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