C#接口和抽象類的理解
-------------->接口<-------------------------------------
接口是指定一組函數成員而不實現成員的引用類型,其他類型-類和接口可以實現接口。
特點:
1.接口是一個引用類型,通過接口可以實現多重繼承。
2.c#中接口成員不能有new ,public,protected,internal,private,static,abstract,override,virtual等修飾符.
3.接口中只能聲明“抽象”成員,即只能聲明方法的名稱和參數,不能編寫具體的可執行代碼。不能聲明共有的域或者私有的成員變量。
4.接口聲明不包括數據成員,只能包含方法,屬性,事件,索引等成員。
5.接口命名一般都以“I”作為首字母(當然也可以不這樣聲明),這也是類和接口的一個區別而已。
6.接口成員的訪問級別是默認的(默認為Public),所以在聲明時不能再為接口成員指定任何訪問修飾符,否則編譯器會報錯。
7.接口一旦被實現,實現類必須實現接口中的所有成員,除非實現類本身是抽象類。
--------->抽象類<--------------------------------
抽象類用來表征對問題領域進行分析,設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體的概念的抽象。
特征:
1.抽象類不能實例化。
2.抽象類可以包含抽象方法和抽象訪問器。
3.不能用sealed修飾符修飾抽象類。採用Sealed修飾符的類無法繼承,而abstract修飾符要求對類進行繼承。
4.從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實際實現。
----->接口和抽象類的相同與區別<----------------------------------------
相同:
1.不能實例化;
2.包含未實現的方法聲明;
3.派生類必須實現未實現的方法,抽象類是抽象的方法,接口則是所有成員。
差別:
1.類可以實現無限個接口,但僅能從一個抽象類繼承,從抽象類派生的類仍可實現接口,從而得出接口是用來解決多種繼承問題。
2.抽象類中可以存在非抽象的方法,可接口不能,且它裡面的方法只是一個聲明必須用Public來修飾沒有具體實現的方法。
3.抽象類中的成員變量可以被不同的修飾符來修飾,可接口中的成員變量默認的都是靜態常量。
4.抽象類是對象的抽象,然而接口是一種行為規範。