C#類設計時,何時用類繼承(Base Class)何時用介面(Interface)

來源:互聯網
上載者:User

 

(www.free56.cn, Based from ‘CLR via C#’)
Base class 和 Interface的使用,有時很容易判斷,有時又很難區分。
1)二者的主要區別:Base class 體現了“IS A”的關係,而Interface體現的是“CAN DO”的關係。因為C#不允許多重繼承(Multi-inherit),所以,如果派生的類不能正確的反映IS-A的關係,就不要使用基類;而如果不同的類或對象(Type)包含了同樣的CAN-DO的功能,那麼就用介面。另外,實值型別(Value type)只能使用介面,不能使用Base Class;
2)相比Interface,使用Base Class的有點:
  i)使用方便(Easy of use):基類提供了大量現成的方法、功能,子類可以直接使用;而使用介面時,必須定義介面規定的所以的成員;
  ii)執行穩定(consistent implementation): 不管關於介面的文檔的描述有多麼完善,其他人(第三方)在根據介面完善類時,也都會遇到很多問題,不可能做到100%的準確,這樣就導致了bug的產生,而使用基類方式,定義一個可以正確執行的基類,而在衍生類別中適當的修改已達到最終需求,無疑會使程式更加穩定,出問題的幾率更小;
  iii)擴充(Versioning):如果給基類增加新的方法(method),那麼,繼承的子類可能無需編譯即可使用基類中新增加這些方法;而使用介面的話,就不這麼容易了,介面中增加新的聲明後,必須在子類中去實現(implement)這些新增的方法。
3)使用interface的一些情況:對於那些提供的相對穩定(consistent)的操作的類,最好給它們定義一個統一的interface。 如,你的類中都有彙總對象(列表),都能夠增加、插入、刪除某一列表中的項目,那麼,我們就可以讓他們都繼承與IList<T>介面,此時,你就可以對你的那些類進行增加、插入、刪除等操作,而無需知道他們的具體類,因為你知道他們都實現了IList<T>介面的方法。
4)當然,有時定義介面和使用類繼承效果沒什麼區別,如實現Compare功能,FLC提供了ICompareer<T>和Comparer<T>的抽象類別供繼承。看你的習慣了:)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.