淺談C#隱式接口與顯式接口

前言:在項目中可能會遇到隱式接口實現和顯式接口實現,那麼本博文將對其進行詳細講解。更多關於C#接口的知識,請查看:C#接口(Interface)精講

一、概述

通俗的來講,“顯示接口實現”就是使用接口名稱作爲方法名的前綴;而傳統的實現方式稱之爲:“隱式接口實現”。

二、示例

interface IAnimal
{
  void Dog();
}
class Animal:IAnimal
{
  public void Dog()
 	{
     Console.WriteLine("dog...");
  }
}

定義了一個Animal接口,一般我們都會這麼調用:

//通過類調用
Animal animal = new Animal();
animal.Dog();
//或者通過接口調用
IAnimal animal = new Animal();
animal.Dog();

類和接口都能調用到,事實上這就是“隱式接口實現”。

那麼下來,我們看一下“顯式接口實現”,如下:

interface IAnimal
{
  void Dog();
}
class Animal:IAnimal
{
  public void Dog()
 	{
     Console.WriteLine("dog...");
  }
}

定義了一個Animal接口,只能通過接口調用:

IAnimal animal = new Animal();
animal.Dog();

用類的方法去實現時會報錯,不允許,“顯式接口實現”只允許接口實現。如果真想用類來實現呢,那必須要進行一下強制類型轉換。

//強制類型轉換後即可
Animal animal = new Animal();
(animal as IAnimal).Dog();

既然顯示接口實現這麼麻煩,甚至可以說多此一舉,爲什麼還要存在了?你要知道,凡事存在即合理!在實際項目中,有時某個類往往會繼承多個接口,而接口中往往會有一些相同名稱、參數與類型的值。通過顯式接口實現可以爲避免一些不必要的歧義。

三、總結

顯示接口實現與隱式接口實現的適應場景:

  1. 當類實現一個接口時,通常使用隱式接口實現,這樣可以方便的訪問接口方法和類自身具有的方法和屬性。
  2. 當類實現多個接口時,並且接口中包含相同的方法簽名,此時使用顯式接口實現。即使沒有相同的方法簽名,仍推薦使用顯式接口,因爲可以標識出哪個方法屬於哪個接口。
  3. 隱式接口實現,類和接口都可訪問接口中方法。顯式接口實現,只能通過接口訪問。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章