一,什麼是接口
- 接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分
- 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
- 接口使得实现接口的类或结构在形式上保持一致。
二,接口特性
1.接口類似抽象類,不能直接實例化;接口中的方法都是抽象方法
2.接口不能 包含常量、字段、運算符、實例構造函數、析構函數或類型、不能包含靜態成員
3.接口成員是自動公開的,不能包含任何修飾符
4.接口自身可從多個接口繼承,類和結構可繼承多個接口,接口不能繼承類
三.接口的實現
接口的顯式實現:當類或結構要實現的是單個接口
接口的隱式實現:當類或結構繼承了多個接口且接口
//隱式實現 IReview rv = new ShopReview(); rv.GetReviews; ShopReview rv= new ShopReview();都能夠調用接口方法 public interface IReview { void GetReviews(); } public class ShopReview : IReview { public void GetReviews() { } } //顯式實現 GetReviews 只能通過接口來訪問,不能通過類訪問 如IReview rv = new ShopReview(); rv.GetReviews;能夠訪問 ShopReview rv= new ShopReview();不能訪問 //可見顯式實現隱藏了代碼的實現,只能通過接口訪問而不是底層 public interface IReview { void GetReviews(); } public class ShopReview : IReview { void IReview.GetReviews() { } }
接口實例:
namespace ConsoleApplication1 { //公共接口 public interface IProgram { void Fun(); //接口成員 } class Program : IProgram { void IProgram.Fun() { Console.WriteLine("hello"); } static Main(string[] args) { IProgram p = new Program(); //聲明接口實例,但不是實例化 p.Fun(); Console.Read(); } } }
區別:
-
當類實現一個接口時,通常使用隱式接口實現,這樣可以方便的訪問接口
-
當類實現多個接口時,並且接口中包含相同的方法簽名,此時用顯式接口實現。標識出哪個方法屬於哪個接口
-
隱式接口實現,類和接口都可訪問接口中方法。只能通過接口訪問
四.接口的繼承
1.接口的繼承與類的繼承不同,類的繼承可以繼承基類方法實現,而接口繼承只是繼承了父接口的成員方法說明
2.接口的繼承允許多繼承
3.被繼承的接口應該是可以訪問到的,不允許繼承private或internal類型