一、抽象類別:
抽象類別是特殊的類,只是不能被執行個體化;除此以外,具有類的其他特性;重要的是抽象類別可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明於抽象類別中,且不包含任何實現,衍生類別必須覆蓋它們。
另外,抽象類別可以派生自一個抽象類別,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其衍生類別必須覆蓋它們。
二、介面:
介面是參考型別的,類似於類,更和抽象類別有所相似,以至於很多人對抽象類別和介面的區別比較模糊。和抽象類別的相似之處有三點:
1、不能執行個體化;
2、包含未實現的方法聲明;
3、衍生類別必須實現未實現的方法,抽象類別是抽象方法,介面則是所有成員(不僅是方法包括其他成員);另外,介面有如下特性:
介面除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、建構函式、解構函式、靜態成員。
一個類可以直接繼承多個介面,但只能直接繼承一個類(包括抽象類別)。
介面執行個體
public delegate void Del();
public interface ITest
{
//int ?a = null;
int A
{
get;
}
void Test();
event Del OnDel;
int this[int index]
{
get;
set;
}
}
注意!還有另外一種類不能被執行個體化:
所有建構函式都被標記為private,這種類也是不能被執行個體化的,嚴格的說是不能在類外被執行個體化,可以在此類的內部執行個體化(這種方式可以用於實現單件設計模式)。注意一點,這樣的類也不能夠作為基類來繼承。
三、抽象類別和介面的使用:
抽象類別用於部分實現一個類,再由使用者按需求對其進行不同的擴充和完善;介面只是定義一個行為的規範或規定。
抽象類別在組件的所有實現間提供通用的已實現功能;介面建立在大範圍全異對象間使用的功能。
抽象類別主要用於關係密切的對象;而介面適合為不相關的類提供通用功能。
抽象類別主要用於設計大的功能單元;而介面用於設計小而簡練的功能塊。
例如:
Window表單可以用抽象類別來設計,可以把公有操作和屬性放到一個抽象類別裡,讓表單和對話方塊繼承自這個抽象類別,再根據自己的需求進行擴充和完善。
列印操作可以作為一個介面提供給每個需要此功能的表單,因為表單的內容不同,就要根據他們自己的要求去實現自己的列印功能。列印時只通過介面來調用,而不用在乎是那個表單要列印。
-----------------------
二。
類和介面有何區別?
從書上摘下來的,還是比較好懂的:
1.抽象類別是一個不完全的類,需要進一步專業化.介面只是一個行為的規範或規定;
2.介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調用的方法;
3.一個類一次可以實現若干個介面,但是只能擴充一個父類
4.介面可以用於支援回調,而繼承並不具備這個特點.
有些直接就是介面與類的區別.第四點我不是很明白......
一個類如果要實現某個介面,除非它實現了該介面中承諾的所有方法,否則(即未實現或者僅僅實現部分方法),該類必須被聲明為抽象類別.而該類的子類也繼承了這一特性
1.抽象類別是一個不完全的類,需要進一步專業化.介面只是一個行為的規範或規定;
2.介面基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調用的方法;
3.一個類一次可以實現若干個介面,但是只能擴充一個父類
4.介面可以用於支援回調,而繼承並不具備這個特點.
如果預計要建立組件的多個版本,則建立抽象類別。抽象類別提供簡單易行的方法來控制組件版本。通過更新基類,所有繼承類都隨更改自動更新。另一方面,介面一旦建立就不能更改。如果需要介面的新版本,必須建立一個全新的介面。
如果建立的功能將在大範圍的全異對象間使用,則使用介面。
抽象類別應主要用於關係密切的對象,而介面最適合為不相關的類提供通用功能。
如果要設計小而簡練的功能塊,則使用介面。
如果要設計大的功能單元,則使用抽象類別。
如果要在組件的所有實現間提供通用的已實現功能,則使用抽象類別。抽象類別允許部分實作類別,而介面不包含任何成員的實現