使用 Google 搜尋本站文章:
首頁 | CodeCharge 討論板 | 部落格 | ASP.NET 電子書 | 所有文章 | 相簿 | News | 網站導讀 | 聯絡 Allen | 訂閱 RSS
Microsoft MVP 
since 2004 
 

Blog 分類 :


何時要使用父類別,何時要使用interface(介面)

By Allen Kuo, 建立日期:2009/05/15 08:33
在這裡說說我個人的看法供各位參考
    加入書籤: 收進你的MyShare個人書籤

如果你希望多個 class 有相同的 method , 你可以有二種方法來做

  • 寫個父類別, 由各個子類別繼承它
  • 寫個介面, 由各類別去實作它

如果要拿類別與介面二者來判斷, 一般人都比較沒有問題, 但若是要在 abstract class (抽象類別), interface (介面)二者間做選擇, 要如何下決定呢?

我寫一些原則,您參考一下

>>若一定要寫 class, 那麼何時要加 abstract 呢?
若這 class 你一定不想讓人 new 它,就一定要加,例如若 '動物' class 不想給人 new, 人家一定只能 new 人,狗,那麼動物就可以宣告成抽象類別( abstract class )

>>abstract class 裡是否一定要寫 abstract method ?
不一定, 例如 '動物' class 裡全部只宣告了 '生' , '死' 二個 method, 它們不一定要被宣告成 abstract method (抽象方法)

>>何時要用 interface 而不要使用父類別
盡量用 interface, 盡量不要用父類別, 如果例子簡化成 '動物一定有眼睛, 需要由各子類別去實作', 而 '動物' class 裡也沒別的定義, 那麼就是使用 interface 的標準狀況, 完全不必考慮是否要使用 abstract class

>>何時要用父類別而不要使用 interface
如果父類別有寫一些 method, property ,你想讓子類別能繼承後就順便有它們,就用父類別, 至於父類別要宣告成 class or abstract class, 就回到我一開始講的,端看父類別想不想被 new

>>如果只是因為有一些類別想要有一些method,property,就用父類別好嗎?
例如您寫 Product (產品), Member (會員) class, 若僅僅只是因為它們都需要一個叫 connection 的 property, 或者需要一個
public void Add(string SQL)
的 method, 仍建議不要因為這麼 weak 的理由就貿然使用父類別, 因為您只需要寫一個 db class, 然後在 Product, Member 裡呼叫 db class 即可
有時你在寫程式時需要存取檔案,此時你一定會叫用 File,FileInfo 類別, 但一定也同意不必因此而讓這類別去繼承它,對吧(不然,一個類別豈不是有繼承不完的東西)

在 C#, VB.NET 語言裡, 一個類別只能繼承一個 class, 可以實作多個 interface, 所以換個角度來看, 寫程式時不要這麼 '敗家' , 隨便地就將維一一個繼承的機會就用掉了  


Copyright © AllenKuo.com , 2000 - 2010