程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 接口映射的實現及原理(3)

接口映射的實現及原理(3)

編輯:關於C語言

注意一下上面標記顏色的部分,可以看出,采用不同的訪問方式,實現的結果並不盡相同。也就是說,針對接口實現了的方法,與類本身自帶的實現,是兩回事,這種情況很類似於采用new關鍵字進行創建一個新的同名成員方法時遭遇的問題。

結果之所以會不同,是由於訪問的方式不同的原因,如果采用“基類”來訪問,很明顯,這裡獲得的就是基類的成員實現。也就是說,這也是多態的一種體現,但並非不可預知或不可控制的。

看見有人說VB很難實現接口的映射,實際上並不是這樣,要解釋一下這個問題,這裡不得不說一下,強類型的C#語法的含義。

“基類 objBase = new 基類();” 這種語法,表示的是使用“基類”來訪問新建的“基類”的實例,換而言之,“基類 objDevired = new 沒有接口的繼承();”表示的就是使用基類來訪問新建的“沒有接口的繼承”的實例。

接口的訪問,也是如此,在原理上,將接口看作是一個十分特殊的抽象類,它與一般的抽象類的區別在於強制了成員的實現(接口的語法由編譯器來驗證的,在CLR並未提供限制性機制),所以,在有一些設計模式中,也可以看到采用了接口-抽象類-具體類的方式來繞開這類強制成員實現的檢查,從而提高靈活性。

所以,VB.Net照樣也可以完成接口映射,因為接口本身的實現機制仍舊是依賴於類的基本特征的。

示例偽代碼如下:

FrIEnd Interface 接口Interface 接口
   ' Methods
   Sub 方法()Sub 方法()
End Interface

FrIEnd Class 基類Class 基類
   Implements 接口

   Public Sub New()Sub New()
   Private Sub Test()Sub Test.接口.方法() Implements 接口.方法
   Public Sub 方法()Sub 方法()
End Class

FrIEnd Class 沒有接口的繼承Class 沒有接口的繼承
   Inherits 基類

   Public Sub New()Sub New()
   Public Sub 方法()Sub 方法()
End Class

FrIEnd Class 有接口的繼承Class 有接口的繼承
   Inherits 基類
   Implements 接口

   Public Sub New()Sub New()
   Private Sub Test()Sub Test.接口.方法() Implements 接口.方法
End Class

但就接口本身來說,是一個便利性的工具,在編程時的認識上,我們不應該將它與類視作“同一類東西”,它是對類的之間關系的一個描述。對於類本身的機制來說,繼承與多態都是提供父子關系的縱向關系描述,而橫向的關系描述,則反映得並不是很好,接口通過一定的實現機制,則部分性地彌補了這個空缺。

像代碼中所描述那樣,接口僅是作為一個便利性的工具存在,在面向接口的編程中,提供一切都圍繞接口而進行,所以,在此類的編程模式下,可以采用接口為替換一個方法實現提供十分理想的方式,雖然這比起濫用繼承並沒有什麼優勢,但它是一個思想與觀念上的轉變,從本質上來說,接口映射與繼承中的new一樣,作為技巧用用可以,但它本身並不是一個值得推薦的方式。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved