第15章 接口[《.net框架程序設(shè)計(jì)》讀書筆記](méi)
發(fā)表時(shí)間:2024-02-17 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]第十五章 接口摘要: 接口的應(yīng)用及完全限定名方式定義接口的應(yīng)用。 一、 接口與繼承l(wèi) C#支持單實(shí)現(xiàn)繼承和多接口繼承l(wèi) 接口中可以定義:事件、無(wú)參屬性(屬性)、含參屬性(索引器);C#不允許接口定義任何靜態(tài)成員(CLR卻允許定義靜...
第十五章 接口
摘要:
接口的應(yīng)用及完全限定名方式定義接口的應(yīng)用。
一、 接口與繼承
l C#支持單實(shí)現(xiàn)繼承和多接口繼承
l 接口中可以定義:事件、無(wú)參屬性(屬性)、含參屬性(索引器);C#不允許接口定義任何靜態(tài)成員(CLR卻允許定義靜態(tài)成員);CLR不允許接口定義實(shí)例字段和構(gòu)造器。
l 缺省為public abstract 方法,但不可用任何修飾符進(jìn)行修飾(包括public)
l 將值類型轉(zhuǎn)換為接口類型(假設(shè)其實(shí)現(xiàn)了某個(gè)接口),則值類型被裝箱為引用類型,以調(diào)用其中的接口方法。
實(shí)現(xiàn)接口繼承或?qū)崿F(xiàn)繼承的原則:
l 存在IS-A關(guān)系使用實(shí)現(xiàn)繼承,存在CAN-DO關(guān)系使用接口繼承
l 實(shí)現(xiàn)繼承可繼承父類型的實(shí)現(xiàn),由于接口中沒(méi)有定義方法的實(shí)現(xiàn),因此繼承后必須實(shí)現(xiàn)方法
l 考慮到每個(gè)人對(duì)接口實(shí)現(xiàn)的不同,使用實(shí)現(xiàn)繼承可同一部分功能的實(shí)現(xiàn)
l 為父類型添加方法可能不影響使用繼承自該類型實(shí)現(xiàn)的用戶,而為接口添加方法導(dǎo)致用戶必須為新方法添加實(shí)現(xiàn)
二、 利用接口改變已裝箱類型中的字段
實(shí)際上是將已裝箱類型轉(zhuǎn)型為接口類型,然后通過(guò)調(diào)用方法進(jìn)行值改變。
因?yàn)閷?duì)已裝箱類型進(jìn)行拆箱到原值類型將在堆棧上聲稱新的值類型,調(diào)用這個(gè)新的值類型的方法不能改變以裝箱類型的值。
三、 實(shí)現(xiàn)多個(gè)有相同方法的接口
使用 接口名.方法名 的形式聲明實(shí)現(xiàn)了那個(gè)接口的方法。成為 完全限定接口名,這樣定義的方法被認(rèn)為是私有方法,不能使用類型本身調(diào)用;當(dāng)將類型轉(zhuǎn)換為接口類型時(shí),完全限定接口名定義的方法又變成一個(gè)公有方法。(比較奇特,也很有用);使用完全限定接口名定義的方法不能使用任何訪問(wèn)修飾符。
四、 顯示接口成員實(shí)現(xiàn)
問(wèn)題的提出:通常接口接受的參數(shù)為Object,這樣的參數(shù)非強(qiáng)類型安全的,可能需要在我們自定義類型的接口實(shí)現(xiàn)中定義強(qiáng)類型安全的方法,同時(shí)也需要實(shí)現(xiàn)“接口合同”
問(wèn)題解決:通過(guò)上面的完全限定接口名方式定義接口方法,可達(dá)到這樣的效果。
優(yōu)點(diǎn):獲得強(qiáng)類型支持,可在編譯期發(fā)現(xiàn)類型不匹配問(wèn)題,而不是到運(yùn)行期。同時(shí),調(diào)用自定義的方法不必進(jìn)行裝箱操作,提高了效率。
缺點(diǎn):由于我們?cè)陬愋椭须[藏了接口實(shí)現(xiàn)(必須將轉(zhuǎn)型為接口才能暴露出接口定義的方法),因此可能對(duì)使用造成不便,因此應(yīng)該慎