面向?qū)ο缶幊蹋豪^承

面向?qū)ο缶幊蹋豪^承

ID:22623865

大?。?07.00 KB

頁數(shù):18頁

時間:2018-10-21

面向?qū)ο缶幊蹋豪^承_第1頁
面向?qū)ο缶幊蹋豪^承_第2頁
面向?qū)ο缶幊蹋豪^承_第3頁
面向?qū)ο缶幊蹋豪^承_第4頁
面向?qū)ο缶幊蹋豪^承_第5頁
資源描述:

《面向?qū)ο缶幊蹋豪^承》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、C#高級編程:繼承KavassZhu2011/03/24課程重點實現(xiàn)繼承和接口繼承多重繼承調(diào)用函數(shù)的基類版本虛方法、隱藏方法和方法的重寫派生類的構(gòu)造函數(shù)抽象類和抽象函數(shù)接口的定義和實現(xiàn)1.繼承的類型繼承的類型主要包括兩種:實現(xiàn)繼承和接口繼承。實現(xiàn)繼承:表示一個類型派生于一個基類型,擁有該基類型的所有成員字段和函數(shù),在實現(xiàn)繼承中,派生類型的每個函數(shù)采用基類型的實現(xiàn)代碼,除非在派生類型的定義中指定重寫該函數(shù)的實現(xiàn)代碼。在需要給現(xiàn)有類型添加功能,或許多相關(guān)的類型共享一個重要的公共功能時,這種類型的繼承是非常有效的。接口繼承:表示一個類型只繼承類函數(shù)的簽名,沒有繼承任

2、何實現(xiàn)代碼。在需要指定該類型具有某些可用的特性時,最好使用這種類型的繼承。接口繼承常常被看做提供了一種契約:讓類型派生于接口,來保證為客戶提供某個功能。在C#中,既有實現(xiàn)繼承,也有接口繼承。他們沒有強弱之分,因為這兩種繼承都完全內(nèi)置于語言中,因此很容易為不同的情形選擇最好的體系結(jié)構(gòu)。C#不支持多重實現(xiàn)繼承,但支持多重接口繼承。結(jié)構(gòu)不支持實現(xiàn)繼承,但結(jié)構(gòu)自動派生于System.ValueType,并且支持接口繼承。結(jié)構(gòu)總是派生于System.ValueType,還可以派生于任意多個接口類總是派生于用戶選擇的另一個類,還可以派生于任意多個接口如果要聲明一個類派生于

3、另一個類,可以使用下面的語法:classMyClass:MyBaseClass{}如果類或結(jié)構(gòu)也派生于接口,則用逗號分隔開基類和接口:classMyClass:MyBaseClass,IInterface1,IInterface2{}對于結(jié)構(gòu)語法如下:structMyStruct:IInterface1,IInterface2{}如果在類定義中沒有指定基類,C#編譯器就假定System.Object是基類。因此下面兩段代碼是相同的:classMyClass:Object{}classMyClass{}C#至此object關(guān)鍵字,它用作System.Object

4、類的假名,所以也可以寫成:clsssMyClass:object{}2.實現(xiàn)繼承把一個基類函數(shù)聲明為virtual,該函數(shù)就可以在任何派生類中重寫。ClassMyBaseClass{PublicvirtualstringVirtualMethod(){return“thisisvirtualmethod”;}}也可以把屬性聲明為virtual。對于虛屬性或重寫屬性,語法與非虛屬性是相同的,但是要在定義中加上關(guān)鍵字virtual,其語法如下所示:publicvirtualstringName{Get{return_name;}Set{_name=value;}}

5、2.1虛方法C#中虛函數(shù)的概念與標準OOP概念相同,可以在派生類中重寫虛函數(shù)。在調(diào)用方法時,會調(diào)用對象類型合適的方法。C#中,函數(shù)默認不是徐牛的,但可以顯示的聲明為virtual。在派生類中需要重寫虛函數(shù)要使用override關(guān)鍵字顯式聲明:classMyClass:BaseClass{PublicoverridestringVirtualMethod(){return“thisisoverridemethod”;}}如果在派生類中沒有使用override關(guān)鍵字,并且派生類的函數(shù)名稱和簽名與基類中的函數(shù)和簽名一致時,將會產(chǎn)生編譯警告。成員字段和靜態(tài)函數(shù)不能聲明

6、為virtual。因為他只對類中的實例函數(shù)成員有意義。虛方法的聲明和重寫不能是private。如果簽名相同的方法在基類和派生類中都進行了聲明,但該方法沒有聲明為virtual和override,派生類方法就會隱藏基類方法。在C#中隱藏方法有顯式隱藏和隱式隱藏兩種,一般建議用顯式隱藏。隱式隱藏會收到編譯器的警告信息。classBaseClass{PublicvoidTest(){}}顯式隱藏classMyClass:BaseClass{PublicnewvoidTest(){}}隱式隱藏classMyClass:baseClass{publicvoidTest(

7、){}}2.2隱藏方法C#有一種特殊的語法用于從派生類中調(diào)用方法的基類版本:base.MethodName()。語法如下:classBaseClass{PublicvirtualstringgetName(){return“kavass”;}}ClassMyClass:BaseClass{publicoverridestringgetName(){returnbase.getName()+”zhu”;}}這時MyClass的實例調(diào)用getName()方法是將得到的是基類的getName的方法加“zhu”以后的字符串2.3調(diào)用函數(shù)的基類版本C#允許把類和函數(shù)聲明

8、為abstract,抽象類不能實例化,

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。