1. 程式人生 > 實用技巧 >C# 介面與抽象類的區別? 情景下使用介面,什麼情景下使用抽象類?

C# 介面與抽象類的區別? 情景下使用介面,什麼情景下使用抽象類?

介面與抽象類的區別:

介面支援多繼承;抽象類不能實現多繼承。

介面可以用於支援回撥;抽象類不能實現回撥,因為繼承不支援。

介面只包含方法、屬性、索引器、事件的簽名,但不能定義欄位和包含實現的方法;抽象類可以定義欄位、屬性、包含有實現的方法。

介面可以作用於值型別和引用型別;抽象類只能作用於引用型別。

什麼情景下使用介面,什麼情景下使用抽象類?

抽象類:

定義了一組介面,但又不想強迫每個實現類都必須實現所有的介面。可以用abstract class定義一組方法體,甚至可以是空方法體,然後由子類選擇自己所感興趣的方法來覆蓋。

某些場合下,只靠純粹的介面不能滿足類與類之間的協調,還必需類中表示狀態的變數來區別不同的關係。abstract的中介作用可以很好地滿足這一點。

規範了一組相互協調的方法,其中一些方法是共同的,與狀態無關的,可以共享的,無需子類分別實現;而另一些方法卻需要各個子類根據自己特定的狀態來實現特定的功能

介面:

類與類之前需要特定的介面進行協調,而不在乎其如何實現。

作為能夠實現特定功能的標識存在,也可以是什麼介面方法都沒有的純粹標識。

需要將一組類視為單一的類,而呼叫者只通過介面來與這組類發生聯絡。

需要實現特定的多項功能,而這些功能之間可能完全沒有任何聯絡。