C#面向?qū)ο缶幊袒A(chǔ)概念匯總
一、類(lèi)與實(shí)例
對(duì)象是一個(gè)自包含的實(shí)體,用一組可識(shí)別的特性和行為類(lèi)標(biāo)示,面向?qū)ο缶幊?,就是針?duì)對(duì)象編寫(xiě)類(lèi),就是具有相同屬性和功能的抽象的集合。
注意:
- 類(lèi)名稱(chēng)首字母要大寫(xiě),多個(gè)單詞則各個(gè)首字母大寫(xiě);
- 對(duì)外公開(kāi)的方法需要用public修飾符
實(shí)例,就是一個(gè)真實(shí)的對(duì)象,實(shí)例化就是創(chuàng)建對(duì)象過(guò)程,使用new關(guān)鍵字來(lái)創(chuàng)建。
二、構(gòu)造方法
構(gòu)造方法又叫構(gòu)造函數(shù),其實(shí)就是對(duì)類(lèi)進(jìn)行初始化,構(gòu)造方法與類(lèi)同名,無(wú)返回值,也無(wú)需void,在new時(shí)候調(diào)用。
所有的類(lèi)都有構(gòu)造方法,如果你不編碼則系統(tǒng)會(huì)默認(rèn)生成空的構(gòu)造方法,若你有定義的構(gòu)造方法,那么默認(rèn)的構(gòu)造方法便會(huì)失效
例子:
三、方法重載
方法的重載提供了創(chuàng)建同名的多個(gè)方法的能力,但這些方法需使用不同法人參數(shù)類(lèi)型。
注意:方法重載時(shí),兩個(gè)方法必須要方法名相同,但參數(shù)名不和參數(shù)個(gè)數(shù)必須要有所不同。
重載的好處:可以在不改變?cè)椒ǖ幕A(chǔ)上新增功能。
四、屬性與修飾符
屬性是一個(gè)方法或一對(duì)方法,但在調(diào)用他的代碼來(lái)看,他是一個(gè)字段,即屬性適合一字段的方式使用方法調(diào)用的場(chǎng)合。
字段是存儲(chǔ)類(lèi)要滿(mǎn)足七十幾所需要的數(shù)據(jù),字段是與類(lèi)相關(guān)的變量。
例子:
public和private區(qū)別:
他們都是修飾符,public表示他所修飾的類(lèi)成員可以允許其他任何類(lèi)來(lái)訪(fǎng)問(wèn)。private只允許同一個(gè)類(lèi)中的成員訪(fǎng)問(wèn),其他類(lèi)包括他的子類(lèi)都無(wú)法訪(fǎng)問(wèn)。
屬性的get和set方法的含義:
屬性有:兩個(gè)方法get和set,get訪(fǎng)問(wèn)器返回與聲明的屬性相同的數(shù)據(jù)類(lèi)型,表示的意思是調(diào)用時(shí)可以得到內(nèi)部字段的值或引用;set訪(fǎng)問(wèn)器沒(méi)有顯示設(shè)置參數(shù),但它有一個(gè)隱式參數(shù),用關(guān)鍵字value表示,他的作用是調(diào)用屬性時(shí)可以給內(nèi)部字段或者引用賦值。
五、封裝
每個(gè)對(duì)象都包含他能進(jìn)行操作所要的所有信息,這個(gè)特性稱(chēng)為封裝,因此對(duì)象不必依賴(lài)其他對(duì)象來(lái)完成自己的操作。
封裝的好處:
- 良好的封裝,能夠減少耦合
- 類(lèi)的內(nèi)部的實(shí)現(xiàn)可以自由的修改
- 類(lèi)具有清晰的對(duì)外接口
六、繼承
對(duì)象的繼承代表了一種is-a的關(guān)系,如果兩個(gè)對(duì)象,A和B,可以描述為B是A,則表明B可以繼承A.繼承者可以理解為是被繼承者的特殊化,因?yàn)樗司邆浔焕^承者的特性外,還具備自己獨(dú)有的個(gè)性,繼承定義了類(lèi)如何相互關(guān)聯(lián),共享特性。繼承的工作方式是定義父類(lèi)和子類(lèi),或者叫基類(lèi)和派生類(lèi),其中類(lèi)繼承父類(lèi)的所有特性,子類(lèi)不但繼承父類(lèi)的所有的特性,還能自己定義新的特點(diǎn)。
學(xué)好繼承三個(gè)注意點(diǎn):
如果子類(lèi)繼承父類(lèi):
- 子類(lèi)擁有父類(lèi)非private的屬性和功能
- 子類(lèi)具有自己的屬性和功能,即子類(lèi)可以擴(kuò)展父類(lèi)沒(méi)有的屬性和功能;
- 子類(lèi)還可以以自己的方式實(shí)現(xiàn)父類(lèi)的功能(方法重寫(xiě))
protected表示繼承時(shí),子類(lèi)可以對(duì)父類(lèi)有完全訪(fǎng)問(wèn)權(quán)
子類(lèi)從他的父中繼承的成員有方法,域,屬性,事件,索引器。但對(duì)于構(gòu)造方法,他不能被繼承,只能被調(diào)用,對(duì)于調(diào)用父類(lèi)的成員,可與用base關(guān)鍵字。
如果不用繼承的話(huà),如果要修改功能,就必須在所有重復(fù)的方法中修改,代碼越多,出錯(cuò)的可能性越大,而繼承優(yōu)點(diǎn)是,繼承使得所有子類(lèi)公共的部分都放在了父類(lèi),使得代碼得到了共享,這就避免了重復(fù),另外,繼承可以使得修飾或者擴(kuò)展而來(lái)的擴(kuò)展都比較容易。
繼承的缺點(diǎn):父類(lèi)變,子類(lèi)不得不變。
繼承會(huì)破壞包裝,父類(lèi)實(shí)現(xiàn)細(xì)節(jié)暴露給子類(lèi)
七、多態(tài)
多態(tài)表示不同的對(duì)象可以執(zhí)行相同的動(dòng)作,但要通過(guò)他們自己的代碼類(lèi)執(zhí)行
- 子類(lèi)以父類(lèi)的身份出現(xiàn)
- 子類(lèi)在工作時(shí)以自己的方式來(lái)實(shí)現(xiàn)
- 子類(lèi)以父類(lèi)的身份出現(xiàn)時(shí),子類(lèi)特有的屬性和方法不可以使用
虛方法和重寫(xiě)
為了是子類(lèi)的實(shí)例完全接替來(lái)自父類(lèi)的類(lèi)成員,父類(lèi)必須將該成員聲明為虛偽的,這是通過(guò)在改成員的返回值類(lèi)型之前添加virtual關(guān)鍵字來(lái)實(shí)現(xiàn),子類(lèi)可以使用override關(guān)鍵字,將父類(lèi)實(shí)現(xiàn),替換為自己實(shí)現(xiàn),這就是方法的重寫(xiě)override。
多態(tài)的原理是當(dāng)方法被調(diào)用時(shí),無(wú)論對(duì)象是否被轉(zhuǎn)換為其父類(lèi),都只有位于對(duì)像繼承鏈最末端的方法實(shí)現(xiàn)會(huì)被調(diào)用,也就是說(shuō),虛方法是按照其運(yùn)行時(shí)類(lèi)型,而非編譯時(shí)類(lèi)型進(jìn)行動(dòng)態(tài)綁定調(diào)用的。
八、重構(gòu)
C#允許把類(lèi)和方法聲明為abstract,即抽象方法
注意:
- 抽象類(lèi)不能被實(shí)例化
- 抽象方法是必須被子類(lèi)重寫(xiě)的方法
- 如果類(lèi)中包含抽象方法那么類(lèi)就必須定義為抽象類(lèi),不論是否還包括其他一般方法
- 我們應(yīng)該考慮讓抽象類(lèi)擁有盡可能多的共同代碼,擁有盡可能少的數(shù)據(jù)。
抽象類(lèi)通常代表一個(gè)抽象概念,他提供一個(gè)繼承的觸發(fā)點(diǎn),當(dāng)設(shè)計(jì)一個(gè)新的抽象類(lèi)時(shí),一定是用來(lái)繼承的 ,所以在一個(gè)以繼承關(guān)系形成的等級(jí)結(jié)構(gòu)里,樹(shù)葉節(jié)點(diǎn)應(yīng)該是具體類(lèi),樹(shù)枝節(jié)點(diǎn)均應(yīng)該是抽象類(lèi)。
九、接口
關(guān)鍵字interface
接口是把隱式公共方法和屬性組合起來(lái),以封裝特定功能的集合,一旦實(shí)現(xiàn)了接口,類(lèi)就可以支持接口所指定的所有屬性和成員,聲明接口和聲明抽象類(lèi)完全相同,但不允許提供接口中任何成員不能的執(zhí)行方式,實(shí)現(xiàn)接口的類(lèi),就必須要實(shí)現(xiàn)接口的所有方法和屬性。
一個(gè)類(lèi)可以支持多個(gè)接口,多個(gè)類(lèi)也可以支持相同的接口,接口的命名前面要加上大寫(xiě)字母“I”
注意:
接口用interface聲明,而不是class,接口名稱(chēng)前面要加I,接口的方法或?qū)傩郧懊娌荒苡行揎椃?、方法沒(méi)有方法體
抽象類(lèi)和接口的區(qū)別:
- 抽象類(lèi)可以給出一些成員的實(shí)現(xiàn),接口卻不包含成員體的實(shí)現(xiàn),抽象類(lèi)的抽象成員可以被子類(lèi)部分實(shí)現(xiàn),接口的成員必須被實(shí)現(xiàn)類(lèi)完全實(shí)現(xiàn),一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但可以實(shí)現(xiàn)多個(gè)借口
- 類(lèi)是對(duì)對(duì)象的抽象,抽象類(lèi)是對(duì)類(lèi)的抽象,接口是對(duì)行為的抽象
- 如果行為跨越不同類(lèi)的對(duì)象,可使用接口;對(duì)于一些相似的類(lèi)對(duì)象,用繼承抽象類(lèi)。
參考自大話(huà)數(shù)據(jù)結(jié)構(gòu)
面向?qū)ο蟮脑O(shè)計(jì)原則:
- 單一職責(zé)原則 (The Single Responsiblity Principle,簡(jiǎn)稱(chēng)SRP):一個(gè)類(lèi),最好只做一件事,只有一個(gè)引起它的變化.
- 開(kāi)放-封閉原則 (The Open-Close Principle,簡(jiǎn)稱(chēng)OCP):對(duì)于擴(kuò)展是開(kāi)放的,對(duì)于更改是封閉的
- Liskov 替換原則(The Liskov Substitution Principle,簡(jiǎn)稱(chēng)LSP):子類(lèi)必須能夠替換其基類(lèi)
- 依賴(lài)倒置原則(The Dependency Inversion Pricinple,簡(jiǎn)稱(chēng)DIP):依賴(lài)于抽象
- 接口隔離原則 (The Interface Segregation Principle,簡(jiǎn)稱(chēng)ISP):使用多個(gè)小的專(zhuān)門(mén)的接口,而不要使用一個(gè)大的總接口。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
上一篇:C#代碼實(shí)現(xiàn)撲克牌排序的幾種方式
欄 目:C#教程
下一篇:C#使用Aspose.Cells創(chuàng)建和讀取Excel文件
本文標(biāo)題:C#面向?qū)ο缶幊袒A(chǔ)概念匯總
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/5035.html
您可能感興趣的文章
- 01-10C#編程實(shí)現(xiàn)自定義熱鍵的方法
- 01-10C#編程獲取資源文件中圖片的方法
- 01-10C#實(shí)現(xiàn)獲取不同對(duì)象中名稱(chēng)相同屬性的方法
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類(lèi)型和變量二
- 01-10C#編程自學(xué)之開(kāi)篇介紹
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類(lèi)型和變量三
- 01-10C#編程自學(xué)之運(yùn)算符和表達(dá)式
- 01-10C#編程自學(xué)之類(lèi)和對(duì)象
- 01-10C#編程和Visual Studio使用技巧(下)
- 01-10C#編程自學(xué)之?dāng)?shù)據(jù)類(lèi)型和變量一


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10C#通過(guò)反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁(yè)無(wú)法打開(kāi)的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實(shí)現(xiàn)txt定位指定行完整實(shí)例
- 01-10WinForm實(shí)現(xiàn)仿視頻播放器左下角滾動(dòng)新
- 01-10C#停止線(xiàn)程的方法
- 01-10C#實(shí)現(xiàn)清空回收站的方法
- 01-10C#通過(guò)重寫(xiě)Panel改變邊框顏色與寬度的
- 01-10C#實(shí)現(xiàn)讀取注冊(cè)表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?