一.什麼是接口
接口是組件之間的協議,描述了組件對外提供的服務。從技術上講接口是一組包含了函數型方法的數據結構。 通過這組數據結構,客戶代碼可以調用組件對象的功能。接口可以從父接口中繼承。接口的繼承首先是說明性繼承,不是實現性繼承,它的實現需要通過類或結構來實現;其次接口繼承可以是多繼承。
二.定義接口
//定義一個接口 public interface IFly { string Fly(); }
接口包含的成員有方法、屬性、索引指示器和事件。由於接口允許多繼承,在可能發生二義性的地方可以采用全權名來避免。可以用類來實現接口。在類中定位接口成員的實現稱之為接口映射。類必須為接口的所有成員提供具體的實現,包括接口中顯式定義的成員, 以及接口從父接口中繼承而來的成員。同樣,在對接口的實現過程中可以采用顯式接口成員執行體來避免產生二義性。派生類可以對基類已經實現的接口進行重實現。
三.為什麼要用接口
01.接口就是為了約束方法的格式(參數和返回值類型)而存在的 。
02.接口可以實現多繼承,彌補單繼承的缺陷。
03.接口可以看成是一個特殊的抽象類,通過反編譯看源碼可知。
04.接口中方法不用訪問修飾符,因為CLR會自動添加,並且不能有方法體。
05.如果一個類實現了某個接口,就得實現該接口中所有的方法。
06.接口要謹慎使用,防止出現接口污染!
07.接口僅僅代表一種能力,實現該接口的類和接口沒有繼承關系。
08.接口是用來實現的,類是用來繼承的。
09.其實很多時候,看似可以不用接口,因為接口就是一個方法的約定,表明你這個類必須要有某些方法,但是不寫接口也可以有這些方法,用了接口,就可以使用接口變量,統一調用,實現多態。
四.抽象類和接口的區別
當需要的各個對象之間存在父子類關系時,可以考慮使用抽象類,
當各個對象之間不存在繼承關系,只是有相同的能力時,而已考慮使用接口
五.使用接口實現多態的例子
Eg:
定義一個接口IFly public interface IFly { string Say(); }
定義一個Brind類實現該接口 public class Brind:Iflay { public string Say() { return "一只鳥"; } }
定義一個Plane類實現該接口 public class Plane:Iflay { public string Say() { return "一架飛機"; } }在main方法中調用
//因為接口也是一個數據類型,所以定義一個接口類型的數組 Iflay[] iflay = { new Brind(), new Plane(), }; foreach (Iflay flay in iflay) { //每一個flay代表一個對象 Console.WriteLine(flay.Say()); } Console.ReadKey();
運行結果: