C# 語法---7.接口interface

一,什麼是接口
  • 接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分
  • 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。
  • 接口使得实现接口的类或结构在形式上保持一致。
二,接口特性
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類型