標籤:style blog color ar 使用 sp strong 檔案 div
介面描述的是類或結構所描述的一組相關功能。
所以繼承此介面的類或結構必須實現介面中定義的所有成員。
介面使用interface關鍵字進行聲明,成員可以為屬性,方法,索引,事件。
介面的特性:
1)、介面類似與抽象類別,不能執行個體化,實現介面的任何非抽象類別都必須實現介面的所有成員:
當顯示實現成員時,實現成員不能通過類的對象訪問,只能通過介面執行個體訪問。
當隱示實現成員時,可以通過類和介面的執行個體訪問,但是實現成員須是public。
2)、介面不能包含欄位,常量,建構函式,解構函式和靜態成員等。
3)、介面成員是公開的,且不需要任何的存取修飾詞。
4)、介面,類和結構都可以繼承多個介面。
1 interface IProgram 2 { 3 void Fun(); 4 } 5 6 class Program : IProgram 7 { 8 //顯示介面實現 9 void IProgram.Fun()10 {11 Console.WriteLine("i am fun.");12 }13 static void Main(string[] args)14 {15 IProgram i = new Program();//聲明一個介面,但不是對介面執行個體化16 i.Fun();17 Console.ReadKey();18 }19 }
隱式介面與顯示介面實現的區別:
一般當類和結構實現單個介面時使用隱式介面。
而當要實現多個介面時,且介面中含有同名函數時就需要使用顯示介面。且使用了顯示介面隱式介面就失效了。
1 interface IProgram 2 { 3 void Fun(); 4 } 5 interface IAPrograme{ 6 void Fun(); 7 } 8 class Program : IProgram,IAPrograme 9 {10 //顯示介面實現11 void IProgram.Fun()12 {13 Console.WriteLine("i am IProgram fun.");14 }15 void IAPrograme.Fun(){16 Console.WriteLine("i am IAPrograme fun.");17 } 18 //實現隱式介面19 //void Fun() { 20 21 //}22 static void Main(string[] args)23 {24 Program p = new Program();25 ((IProgram)p).Fun();26 ((IAPrograme)p).Fun();27 Console.ReadKey();28 }29 }
介面的繼承:
介面的繼承指的是繼承的父介面的所有成員,但是還是沒有實現。且允許多繼承。
1 interface IProgram 2 { 3 void Fun(); 4 } 5 interface IAPrograme : IProgram 6 { 7 8 } 9 class Program : IProgram, IAPrograme10 {11 //顯示介面實現12 void IProgram.Fun()13 {14 Console.WriteLine("i am IProgram fun.");15 }16 //void IAPrograme.Fun()17 //{18 // Console.WriteLine("i am IAPrograme fun.");19 //}20 //實現隱式介面21 //void Fun() { 22 23 //}24 static void Main(string[] args)25 {26 Program p = new Program();27 //((IProgram)p).Fun();28 ((IAPrograme)p).Fun();29 30 Console.ReadKey();31 }32 }
介面的覆蓋:
1 interface IProgram 2 { 3 void Fun(); 4 } 5 abstract class IAProgram : IProgram 6 { 7 abstract public void AFun(); 8 void IProgram.Fun() 9 {10 AFun();11 }12 }13 class Program : IAProgram14 {15 16 public override void AFun()17 {18 Console.WriteLine("i am AProgram fun.");19 }20 static void Main(string[] args)21 {22 IProgram p = new Program();23 //((IProgram)p).Fun();24 p.Fun();25 26 Console.ReadKey();27 }28 }
先進行介面的實現,然後再調用抽象函數。
介面和抽象類別的區別。
介面用於規範,抽象類別用於共性。
介面中只能聲明方法,屬性,事件,索引器。而抽象類別中可以有方法的實現,也可以定義非靜態類變數。
抽象類別是類,所以只能被單繼承,但是介面卻可以一次實現多個。
抽象類別可以提供某些方法的部分實現,介面不可以。
抽象類別的執行個體是它的子類給出的。介面的執行個體是實現介面的類給出的。
在抽象類別中加入一個方法,那麼它的子類就同時有了這個方法。而在介面中加入新的方法,那麼實現它的類就要重新編寫(這就是為什麼說介面是一個類的規範了)。
介面成員被定義為公用的,但抽象類別的成員也可以是私人的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程式的代碼或衍生類別中訪問)。
此外介面不能包含欄位、建構函式、解構函式、靜態成員或常量。
C#中的介面和類有什麼異同。
異:
不能直接執行個體化介面。
介面不包含方法的實現。
介面可以實現多繼承,而類只能是單繼承。
類定義可在不同的源檔案之間進行拆分。
同:
介面、類和結構可從多個介面繼承。
介面類似於抽象基類:繼承介面的任何非抽象類別型都必須實現介面的所有成員。
介面可以包含事件、索引器、方法和屬性。
一個類可以實現多個介面。
c#介面