2009-04-14 132 views
85

在C#中,什麼時候應該使用接口,何時應該使用抽象類?什麼是決定性因素?接口與抽象類

+29

我不同意這是「確切」的重複。 – 2009-04-14 13:45:33

回答

107

一個抽象類的優點是:對指定的方法的默認實現

  • 能力
  • 新增不變檢查到功能
  • 已在「接口」方法的調用方式
  • 稍微控制
  • 能夠提供與「免費」界面相關或不相關的行爲

接口僅僅是數據傳遞合同,並沒有這些功能。但是,它們通常更靈活,因爲類型只能從一個類派生,但可以實現任意數量的接口。

+0

@JaredPar:我猜這是爲了勸阻回答重複的問題(順便說一句,我不是那個低估了你的人) – Brann 2009-04-14 13:34:25

5

真正的問題是:是否使用接口或基類。這已經在之前報道過了。

在C#中,抽象類(標有關鍵字「abstract」的一個類)只是一個類,您無法實例化對象。這與僅僅區分基類和接口之間的區別有所不同。

59

抽象類和接口在語義上是不同的,儘管它們的用法可能會重疊。

抽象類通常用作類似類的構建基礎。類的常見實現可以放在抽象類中。

接口通常用於指定類的能力,其中類不一定非常相似。

6

要考慮的另一件事是,由於沒有多重繼承,如果您希望某個類能夠從您的接口/抽象類實現/繼承,但從另一個基類繼承,請使用接口。