一、類與實例
對象是一個自包含的實體,用一組可識別的特性和行為類標示,面向?qū)ο?/a>編程,就是針對對象編寫類,就是具有相同屬性和功能的抽象的集合。
注意:
- 類名稱首字母要大寫,多個單詞則各個首字母大寫;
- 對外公開的方法需要用public修飾符
實例,就是一個真實的對象,實例化就是創(chuàng)建對象過程,使用new關(guān)鍵字來創(chuàng)建。
二、構(gòu)造方法
構(gòu)造方法又叫構(gòu)造函數(shù),其實就是對類進行初始化,構(gòu)造方法與類同名,無返回值,也無需void,在new時候調(diào)用。
所有的類都有構(gòu)造方法,如果你不編碼則系統(tǒng)會默認生成空的構(gòu)造方法,若你有定義的構(gòu)造方法,那么默認的構(gòu)造方法便會失效
例子:
三、方法重載
方法的重載提供了創(chuàng)建同名的多個方法的能力,但這些方法需使用不同法人參數(shù)類型。
注意:方法重載時,兩個方法必須要方法名相同,但參數(shù)名不和參數(shù)個數(shù)必須要有所不同。
重載的好處:可以在不改變原方法的基礎(chǔ)上新增功能。
四、屬性與修飾符
屬性是一個方法或一對方法,但在調(diào)用他的代碼來看,他是一個字段,即屬性適合一字段的方式使用方法調(diào)用的場合。
字段是存儲類要滿足七十幾所需要的數(shù)據(jù),字段是與類相關(guān)的變量。
例子:
public和private區(qū)別:
他們都是修飾符,public表示他所修飾的類成員可以允許其他任何類來訪問。private只允許同一個類中的成員訪問,其他類包括他的子類都無法訪問。
屬性的get和set方法的含義:
屬性有:兩個方法get和set,get訪問器返回與聲明的屬性相同的數(shù)據(jù)類型,表示的意思是調(diào)用時可以得到內(nèi)部字段的值或引用;set訪問器沒有顯示設(shè)置參數(shù),但它有一個隱式參數(shù),用關(guān)鍵字value表示,他的作用是調(diào)用屬性時可以給內(nèi)部字段或者引用賦值。
五、封裝
每個對象都包含他能進行操作所要的所有信息,這個特性稱為封裝,因此對象不必依賴其他對象來完成自己的操作。
封裝的好處:
- 良好的封裝,能夠減少耦合
- 類的內(nèi)部的實現(xiàn)可以自由的修改
- 類具有清晰的對外接口
六、繼承
對象的繼承代表了一種is-a的關(guān)系,如果兩個對象,a和b,可以描述為b是a,則表明b可以繼承a.繼承者可以理解為是被繼承者的特殊化,因為他除了具備被繼承者的特性外,還具備自己獨有的個性,繼承定義了類如何相互關(guān)聯(lián),共享特性。繼承的工作方式是定義父類和子類,或者叫基類和派生類,其中類繼承父類的所有特性,子類不但繼承父類的所有的特性,還能自己定義新的特點。
學(xué)好繼承三個注意點:
如果子類繼承父類:
- 子類擁有父類非private的屬性和功能
- 子類具有自己的屬性和功能,即子類可以擴展父類沒有的屬性和功能;
- 子類還可以以自己的方式實現(xiàn)父類的功能(方法重寫)
protected表示繼承時,子類可以對父類有完全訪問權(quán)
子類從他的父中繼承的成員有方法,域,屬性,事件,索引器。但對于構(gòu)造方法,他不能被繼承,只能被調(diào)用,對于調(diào)用父類的成員,可與用base關(guān)鍵字。
如果不用繼承的話,如果要修改功能,就必須在所有重復(fù)的方法中修改,代碼越多,出錯的可能性越大,而繼承優(yōu)點是,繼承使得所有子類公共的部分都放在了父類,使得代碼得到了共享,這就避免了重復(fù),另外,繼承可以使得修飾或者擴展而來的擴展都比較容易。
繼承的缺點:父類變,子類不得不變。
繼承會破壞包裝,父類實現(xiàn)細節(jié)暴露給子類
七、多態(tài)
多態(tài)表示不同的對象可以執(zhí)行相同的動作,但要通過他們自己的代碼類執(zhí)行
- 子類以父類的身份出現(xiàn)
- 子類在工作時以自己的方式來實現(xiàn)
- 子類以父類的身份出現(xiàn)時,子類特有的屬性和方法不可以使用
虛方法和重寫
為了是子類的實例完全接替來自父類的類成員,父類必須將該成員聲明為虛偽的,這是通過在改成員的返回值類型之前添加virtual關(guān)鍵字來實現(xiàn),子類可以使用override關(guān)鍵字,將父類實現(xiàn),替換為自己實現(xiàn),這就是方法的重寫override。
多態(tài)的原理是當方法被調(diào)用時,無論對象是否被轉(zhuǎn)換為其父類,都只有位于對像繼承鏈最末端的方法實現(xiàn)會被調(diào)用,也就是說,虛方法是按照其運行時類型,而非編譯時類型進行動態(tài)綁定調(diào)用的。
八、重構(gòu)
c#允許把類和方法聲明為abstract,即抽象方法
注意:
- 抽象類不能被實例化
- 抽象方法是必須被子類重寫的方法
- 如果類中包含抽象方法那么類就必須定義為抽象類,不論是否還包括其他一般方法
- 我們應(yīng)該考慮讓抽象類擁有盡可能多的共同代碼,擁有盡可能少的數(shù)據(jù)。
抽象類通常代表一個抽象概念,他提供一個繼承的觸發(fā)點,當設(shè)計一個新的抽象類時,一定是用來繼承的 ,所以在一個以繼承關(guān)系形成的等級結(jié)構(gòu)里,樹葉節(jié)點應(yīng)該是具體類,樹枝節(jié)點均應(yīng)該是抽象類。
九、接口
關(guān)鍵字interface
接口是把隱式公共方法和屬性組合起來,以封裝特定功能的集合,一旦實現(xiàn)了接口,類就可以支持接口所指定的所有屬性和成員,聲明接口和聲明抽象類完全相同,但不允許提供接口中任何成員不能的執(zhí)行方式,實現(xiàn)接口的類,就必須要實現(xiàn)接口的所有方法和屬性。
一個類可以支持多個接口,多個類也可以支持相同的接口,接口的命名前面要加上大寫字母“i”
注意:
接口用interface聲明,而不是class,接口名稱前面要加i,接口的方法或?qū)傩郧懊娌荒苡行揎椃⒎椒]有方法體
抽象類和接口的區(qū)別:
- 抽象類可以給出一些成員的實現(xiàn),接口卻不包含成員體的實現(xiàn),抽象類的抽象成員可以被子類部分實現(xiàn),接口的成員必須被實現(xiàn)類完全實現(xiàn),一個類只能繼承一個抽象類,但可以實現(xiàn)多個借口
- 類是對對象的抽象,抽象類是對類的抽象,接口是對行為的抽象
- 如果行為跨越不同類的對象,可使用接口;對于一些相似的類對象,用繼承抽象類。
參考自大話數(shù)據(jù)結(jié)構(gòu)
面向?qū)ο蟮脑O(shè)計原則:
- 單一職責原則 (the single responsiblity principle,簡稱srp):一個類,最好只做一件事,只有一個引起它的變化.
- 開放-封閉原則 (the open-close principle,簡稱ocp):對于擴展是開放的,對于更改是封閉的
- liskov 替換原則(the liskov substitution principle,簡稱lsp):子類必須能夠替換其基類
- 依賴倒置原則(the dependency inversion pricinple,簡稱dip):依賴于抽象
- 接口隔離原則 (the interface segregation principle,簡稱isp):使用多個小的專門的接口,而不要使用一個大的總接口。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對服務(wù)器之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
原文鏈接:https://blog.csdn.net/Czhenya/article/details/77984175