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