一:欄位和屬性:
字段:公共字段只是類用public修飾符所公開的簡單公共變數。
屬性:屬性是對字段的封裝,它使用get,set訪問器來控制如何設定或返回字段值。
區別:雖然公共欄位在速度上比屬性快(變數和方法),但是,字段必須開放為public, 這樣的話,呼叫者可以直接修改它的值,此時,值的內容是否合法,執行是否會出錯就沒有了保障。進而會大大降低類的可重用性;相反,屬性可以對存入的變數進行處理,對輸入的值進行條件限制。在輸入不合法時會提示警告。
雖然在實際專案的開發過程中,公共欄位和屬性在合適的條件下都可以使用,但是我們應該盡可能的使用屬性(property),而不是資料成員(field);把所有的字段都設定為私有字段,如果要暴露它們,則把它們封裝成屬性
二 :在物件導向中,萬物皆物件。
在建立物件時,new關鍵字幫我們完成了三件事
1:在記憶體中開闢一塊空間,
2:在開闢的空間中建立物件
3:呼叫物件的建構函式進行初始化物件
三:物件的生命週期
每個物件都有乙個明確定義的生命週期,除了「正在使用」的正常狀態之,還有兩個重要的階段:
1、建構函式:第一次例項化乙個物件時,需要初始化該物件,這個初始化過程稱為構造階段,由建構函式完成。
a:作用:初始化物件(給物件的每個屬性依次賦值)
建構函式是乙個特殊的方法
1:建構函式沒有返回值,連void也不能寫。
2:建構函式的名稱必須和類名一致
3:建立物件時會執行建構函式,建構函式可以過載。
b:每個類都有乙個預設的建構函式,如果不指定建構函式,就會呼叫預設的,如果指定了,那麼預設的建構函式就被乾掉了。若之後需要用的話,需要自己寫。
2、析構函式:在刪除乙個物件時,常常需要執行一些清理工作,例如釋放記憶體,這由析構函式完成。
四:靜態成員和例項成員
(一)、使用靜態類
1:如果想要把類當作乙個「工具類」使用,則可以考慮將類寫成靜態類
2:靜態類在整個專案中資源共享。
(二)、靜態和非靜態的區別
1:在非靜態中既可以有例項成員,也可以有靜態成員。
2:在呼叫例項成員的時候,需要使用物件名.(點)例項成員。
在呼叫靜態成員的時候,需要用類名.(點)靜態成員
(三)、靜態非靜態總結:
1:靜態成員必須使用類名去呼叫,而例項成員使用物件名呼叫。
2:靜態函式中,只能訪問靜態成員,不允許訪問例項成員。
3:例項函式中,既可以使用靜態成員也可以使用例項成員,靜態類中只允許有靜態成員,不允許出現例項成員
五、c#物件導向的三大特性
(一):封裝
封裝就是通過給類及類中的成員變數、屬性和方法設定不同的訪問修飾符(public、protected、internal、protected internal、private)來控制它們的訪問許可權,以達到封裝的目的。
public:公有訪問。不受任何限制;
private:私有訪問。只限於本類成員內訪問,子類、例項都不能訪問。
protected: 保護訪問。只限於本類內部和子類內部可訪問,例項不能訪問。
intermal:內部訪問。只限於本專案內訪問,其他不能訪問。(相當於專案內的public)
protected internal:內部保護訪問。只限於本專案和子類訪問,其他不能訪問。(protected和internal的許可權之和)
(二):繼承
(1)被繼承的類稱為父類、基類、超類。而主動繼承的類成為其子類或派生類。子類繼承父類的狀態和行為,同時也可以有自己的特性。
(2)system.object是所有類的父類。
(3)c#中繼承的寫法:class a:b{}
(4)繼承具有傳遞性
(5)構造方法不能繼承
(6)c#只允許單繼承,乙個類只能繼承於乙個父類
(7)密封類不能被繼承,例如 sealed class animal{}
(8)子類不僅繼承了父類的公有成員,也繼承了父類的私有成員,只是父類的私有成員在子類中不可被訪問。
(三):多型
1:過載:
同乙個類中有多個方法的名稱相同、引數個數不同或型別不同,則屬於過載。
同乙個類中有多個方法的名稱相同、引數個數相同、引數型別相同,返回值型別不同,這樣不屬於過載。
2重寫實現重寫有三種情況:
第一:普通類中的virtual方法可在子中被重寫;
第二:抽象類中的abstract方法和abstract屬性必須直接或間接在子類中被重寫;
第三:介面中的所有成員都必須被子類實現。
第一種情況:
(1)當類為普通類時,只有父類的虛方法才能被子類重寫,子類實現重寫要用關鍵字override,如果不加override就會隱藏父類的方法,隱藏需要加上關鍵字new,例如:public new static void a(){}或public static new void a(){}。
(2)靜態類中只能有靜態成員,非靜態類中可以有靜態成員和非靜態成員。
(3)靜態方法不能被重寫,但可以被隱藏。
(4)靜態成員不能帶override、abstract、virtual。
第二種情況:
(1)抽象類中可以有抽象屬性、抽象方法和成員例項,繼承抽象類的子類必須直接或間接重寫所有的抽象方法,而且引數和返回值型別必須完全一致,成員例項可以不被重寫。
(2)非抽象類中只能有成員例項。
(3)抽象類不能直接例項化,但是有構造方法,可以利用黎克特制替換原則把子類物件賦值給抽象的父類變數
(4)抽象方法必須用abstract修飾,而且不能有方法體。
(5)抽象方法不能用private修飾。
第三種情況:
(1)c#中類是單繼承,介面是多繼承,如果同時繼承類和介面的話,介面必須在基類的後面,否則編譯會出錯。
(2)介面不能直接例項化,沒有構造方法,可以利用黎克特制替換原則把子類物件賦值給介面型別的父類變數。
(3)介面中的成員沒有訪問修飾符,預設是public型別的,而且不能手動新增任何訪問修飾符。
(4)實現介面時不需要override,實現介面的類中的方法的引數和返回值型別必須與介面中定義的型別完全一致。
(5)介面命名一般以i開頭,表示某種功能,實現某一介面表示具備了某一功能。
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...
C 物件導向程式設計
1.1 類與物件 物件 object 是類 class 的乙個例項 instance 如果將物件比作房子,那麼類就是房子的設計圖紙。所以物件導向程式設計的重點是類的設計,而不是物件的設計。類可以將資料和函式封裝在一起,其中函式表示了類的行為 或稱服務 類提供關鍵字public protected 和...
C 物件導向程式設計
物件導向程式設計 以物件為中心,將資料和方法封裝在一起。三要素 抽象繼承 多型 五個基本原則 單一職責原則 就乙個類而言,應該有且僅有乙個引起它變化的原因。開放 封閉原則 是說軟體實體 類 模組 函式等等 應該可以擴充套件,但是不可修改。黎克特制替換換原則 子類應當可以替換父類並出現在父類能夠出現的...