天天看點

C#接口的顯示與隐式

    通俗的來講,“顯示接口實作”就是使用接口名稱作為方法名的字首;而傳統的實作方式稱之為:“隐式接口實作”。費話不說,例子如下:

  

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

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

   

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

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

  那麼“顯示接口實作”是神馬模樣呢?

 

interface IAnimal
   {
     void Dog();
   }
   class Animal:IAnimal
   {
     void IAnimal.Dog()
     {
       Console.WriteLine("dog...");
     }
   }     //隻能通過接口調用
     IAnimal animal = new Animal();
     animal.Dog();      

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

//強制類型轉換後即可
     Animal animal = new Animal();
     (animal as IAnimal).Dog();      
  1. 當類實作一個接口時,通常使用隐式接口實作,這樣可以友善的通路接口方法和類自身具有的方法和屬性。
  2. 當類實作多個接口時,并且接口中包含相同的方法簽名,此時使用顯式接口實作。即使沒有相同的方法簽名,仍推薦使用顯式接口,因為可以辨別出哪個方法屬于哪個接口。
  3. 隐式接口實作,類和接口都可通路接口中方法。顯式接口實作,隻能通過接口通路。