C# OO(初级思想)
繼承,多態(tài),封裝
在C#中,為了能夠合理描述自然界的規(guī)律,面向?qū)ο蟮木幊桃肓死^承的概念,是面向?qū)ο缶幊讨凶钪匾母拍钪?定義了如何根據(jù)現(xiàn)有的類創(chuàng)建新類的過程.
繼承:一個類派生出來的子類具有這個類所有的公共屬性和方法。
父類派生子類,子類繼承父類。
語法-- 子類:父類
子類和父類
被繼承的類稱為父類或基類,繼承其他類的類稱為子類或派生類,子類不僅具有自己的獨有的成員,還有父類的成員。
Is a?的應(yīng)用
在兩個類中建立繼承關(guān)系必須符合is a 的關(guān)系(例:小型卡車 is a 卡車,卡車is a 汽車,小型卡車is a汽車)
里氏替換原則:子類可以替換父類,但父類不可以替換子類對象。
只有當(dāng)子類可以替換父類時,軟件功能不受影響,父類才能真正被復(fù)用,而子類也能夠在父類的基礎(chǔ)上增加新的行為。
Is?和?as操作符的使用
Is 操作符用于檢查對象和制定的類型是否兼容。
As 操作符主要用于兩個對象之間的類型轉(zhuǎn)換
繼承的特性
繼承有傳遞性(子類能派生子類)和單根性(一個子類不能同時繼承多個父類)
Base關(guān)鍵字和protected修飾符
base:表示父類,用于調(diào)用父類里的成員。
Protected:修飾父類成員,只允許子類調(diào)用和類的本身內(nèi)部訪問,不允許其他非子類訪問。
修飾符的區(qū)別:
Public:任何類都可以訪問。
Private:任何類都不可以訪問。
Protected:只能由類的本身該類的子類內(nèi)部訪問,其他任何類不可以訪問
子類構(gòu)造函數(shù):
任何子類都繼承父類的公共無參構(gòu)造函數(shù),父類的其他構(gòu)造函數(shù)不會被繼承,只能在子類中聲明相同簽名的構(gòu)造函數(shù)并用base顯示調(diào)用。
子類的構(gòu)造函數(shù)肯定會調(diào)用父類的構(gòu)造函數(shù),先執(zhí)行父類中的構(gòu)造函數(shù)在執(zhí)行子類中的構(gòu)造函數(shù)。
隱式調(diào)用父類中的構(gòu)造函數(shù):
子類(沒有指明的情況下)調(diào)用父類中系統(tǒng)默認(rèn)的一個無參構(gòu)造函數(shù)。
顯示掉用父類中的構(gòu)造函數(shù)
在子類指明的情況下用base關(guān)鍵字調(diào)用父類的某一個構(gòu)造函數(shù),實現(xiàn)屬性的初始化,然后在子類本身的構(gòu)造函數(shù)中完成對子類特有的屬性初始化。如果子類沒有指明調(diào)用父類里手動創(chuàng)建的哪個構(gòu)造函數(shù)時系統(tǒng)就會調(diào)用父類中手動創(chuàng)建的無參的構(gòu)造函數(shù),若是沒有系統(tǒng)將會報錯。
Public SE(string? name);? =? Public SE(string? name):base();
注:用base調(diào)用父類構(gòu)造函數(shù)時,只能傳遞參數(shù)。?????????????????????????????????????????????????????????????????????????????????????????????????????
多態(tài)
多態(tài):兩個或多個屬于不同類的對象,對于同一個消息(方法調(diào)用)作出不同響應(yīng)的方式。
多態(tài)是建立在繼承的基礎(chǔ)上的,沒有繼承就沒有多態(tài)。
實現(xiàn)多態(tài)
以父類類型作為參數(shù):可以接受他的子類類型,程序在運行中自動判斷實際參數(shù)屬于哪種子類,調(diào)用子類的方法從而實現(xiàn)多態(tài)。
我們通過虛方法和抽象方法在繼承的基礎(chǔ)上實現(xiàn)多態(tài)(通過重寫父類的方法,完成自己的方法)。
虛方法:實現(xiàn)方法重寫。通過關(guān)鍵字Virtual來定義一個虛方法(父類中),用Override修飾來重寫這個虛方法(子類中)。
語法:訪問修飾符 virtual 返回值類型 方法名()
{
//方法體
}
?
用虛方法 實現(xiàn)多態(tài):
1.子類重寫父類的虛方法
兩種方式:1.創(chuàng)建父類變量用子類對象實例化這個父類變量
????????? 2.把父類類型作為參數(shù),它的子類對象作為參數(shù)傳入
2.運行時,根據(jù)實際創(chuàng)建的對象決定執(zhí)行哪個方法
抽象方法: 是一個沒有實現(xiàn)的方法,這些方法只能定義,通過在定義方法時加上關(guān)鍵字abstract可以聲明一個抽象方法(父類中),用Override來重寫這個抽象方法(重寫)。
語法:訪問修飾符 sbstract返回值類型 方法名();
注:抽象方法中沒有方法體。
抽象方法的應(yīng)用:定義抽象方法必須在非抽象的子類中去實現(xiàn),抽象方法必須定義在抽象類中。
?
抽象類:用sbstract修飾的類都是抽象類。抽象類是抽象的概念,抽象類提供抽象方法要求繼承他的子類去實現(xiàn),通過這些抽象方法來約束子類的行為,有抽象的方法的類必然是抽象類,抽象類中不一定只能有抽象方法。
抽象類不能被實例化,也不能是密封和靜態(tài)的
?
抽象方法和虛方法都是通過override重寫父類的方法來實現(xiàn)多態(tài)。
注:重寫父類的語法:方法名、參數(shù)列表,返回值一樣
(方法重載是在一個類中完成,方法名相同,參數(shù)個數(shù)和參數(shù)類型不同,并且和返回值無關(guān))
二者之間的區(qū)別:
抽象方法:
用abstract關(guān)鍵字修飾,
沒有方法體,
必須被override重寫,
只能在抽象類中寫。
?
虛方法:
用virtaul關(guān)鍵字修飾有方法體
可以被override重寫,
也可以不被override重寫
?????????????????
面向?qū)ο笏枷?/strong>
封裝:保證對象自身數(shù)據(jù)的完整性和安全性。
繼承:建立類之間的關(guān)系,實現(xiàn)代碼復(fù)用,方便系統(tǒng)擴(kuò)展。
多態(tài):相同的方法調(diào)用可實現(xiàn)不同的實現(xiàn)方式。
面向?qū)ο蟾呒墤?yīng)用?
設(shè)計模擬式
在軟件工程中把對象的依賴性叫做耦合,而一個模塊內(nèi)部各個元素彼此之間的聯(lián)系叫做內(nèi)聚。軟件工程中推崇“高內(nèi)聚”,“低耦合”的設(shè)計。?
設(shè)計模式概念:某些特定問題經(jīng)過實踐檢驗的特定的解決方法。
設(shè)計模式就像古代的《三十六計》一樣。設(shè)計模式就是人們在軟件
開發(fā)中對一些經(jīng)驗的總結(jié)。
面向?qū)ο笤O(shè)計模式是可復(fù)用面向?qū)ο筌浖幕A(chǔ)??
簡單工廠設(shè)計模式:創(chuàng)建簡單工廠就是吧變化點封裝起來,在類的內(nèi)部對代碼執(zhí)行增加修改通過定義一個父類類型的方法返回父類類型子類對象,這個方法體內(nèi)實例的子類根據(jù)方法傳的參數(shù)來進(jìn)行創(chuàng)建。
簡單工廠設(shè)計模式降低了類與類之間的耦合性極大地減少了客戶程序的修改,使程序擴(kuò)展性能大大增強(qiáng)(使客戶程序基本不需改動),但簡單工廠也有一定的局限性。
單例設(shè)計模式:將產(chǎn)生實例的方法在類部,通過一個靜態(tài)方法返回它的實例。(在類中把構(gòu)造函數(shù)設(shè)為私有的)
私有構(gòu)造函數(shù):一種特殊的構(gòu)造函數(shù),通常只包含靜態(tài)成員的類中,如果一個類中只有私有的構(gòu)造函數(shù)沒有公共得構(gòu)造函數(shù)的話,則其他類將無法訪問該類的實例。
單例設(shè)計模式特點:
1.???? 私有構(gòu)造函數(shù)。
2.???? 2.保存唯一的靜態(tài)的私有變量。
3.???? 獲取唯一實例的靜態(tài)方法。
應(yīng)用單例設(shè)計模式:當(dāng)類只能有一個實例存在,并且可以在全局訪問可以使用單例設(shè)計模式。
簡單工廠模式應(yīng)用:簡單工廠模式試用于客戶程序不需要知道所創(chuàng)建的對象到底屬于哪個子類,所要創(chuàng)建的對象需要變化,因此把這些變化封裝到工廠之內(nèi)。
軟件的設(shè)計以需求為基礎(chǔ),所以要適當(dāng)?shù)那闆r下選用適當(dāng)?shù)脑O(shè)計模式。
總結(jié)
以上是生活随笔為你收集整理的C# OO(初级思想)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式跟踪系统
- 下一篇: c# char unsigned_dll