接口(interface)


 這節講一下接口(interface) 。

 接口是一種特殊的抽象類,它用來定義一組行為規范,不同於抽象類的是,接口只能定義方法,並且只能定義抽象方法。類用繼承來描述子類和父類之間的關系,而接口用實現來描述接口和類的關系。

interface IAnimal
{
    void Shout ();
}

 接口有個約定俗成的命名規則,所有接口的首字母都是I接口中的方法都必須是public,所以定義接口中的方法時可以省略此關鍵字。

    

 接口本身的語法很簡單,但是接口在整個面向對象中的作用是舉足輕重的,一般接口作為服務的調用者,其子類作為服務的提供者,可以讓我們實現更松的耦合。跟接口有關的有一個很重要的原則:接口隔離原則(Interface Segregation Principle),它跟類的單一職責原則類似,它強調接口定義的方法,要從屬於同一類。

 我們看一個不太恰當例子:

interface IDonaldDuck
{
    void Say ();
    void Swim ();
}

class DonalDuck : IDonaldDuck
{
    public void Say ()
    {
        Console.WriteLine ("沒有小鴨子比我更懂說話。");
    }

    public void Swim ()
    {
        Console.WriteLine ("沒有小鴨子比我更懂游泳。");
    }
}

 唐老鴨繼承了IDonalDuck接口,接口定義了說話和浮水這兩個方法,說話是人的特有的行為,浮水是鴨科動物等的行為,這兩種行為的從屬不一樣,所以根據接口隔離原則來說,我們不能將其放在一塊,而是應該像下面這樣:

interface IPreson
{
    void Say ();
}
interface IDuck
{
    void Swim ();
}

class DonalDuck : IPreson,IDuck
{
    public void Say ()
    {
        Console.WriteLine ("沒有小鴨子比我更懂說話。");
    }

    public void Swim ()
    {
        Console.WriteLine ("沒有小鴨子比我更懂游泳。");
    }
}

 根據行為的從屬性質不同,划分合理的接口,但是要注意,我們在開發的時候,不要將接口分的過細,要取一個度,合適的遵循接口隔離原則。

 

 另外,我們還可以顯示的實現接口,還是以上面的例子來說:

class DonalDuck : IPreson, IDuck
{
    void IPreson.Say ()
    {
        throw new NotImplementedException ();
    }

    void IDuck.Swim ()
    {
        throw new NotImplementedException ();
    }
}

 在方法的名字前加上接口名,這樣,在實例化類的時候,我們只有在將類的實例賦給它的實現接口時,才能使用該類實現的該接口的方法。

 直接實例,是無法看到實現的接口方法的。

我們需要顯示的賦給接口類才能看到對應的方法:

 

 個人公眾號,熱愛分享,知識無價。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM