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