通俗的來講,“顯示接口實作”就是使用接口名稱作為方法名的字首;而傳統的實作方式稱之為:“隐式接口實作”。費話不說,例子如下:
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();
- 當類實作一個接口時,通常使用隐式接口實作,這樣可以友善的通路接口方法和類自身具有的方法和屬性。
- 當類實作多個接口時,并且接口中包含相同的方法簽名,此時使用顯式接口實作。即使沒有相同的方法簽名,仍推薦使用顯式接口,因為可以辨別出哪個方法屬于哪個接口。
- 隐式接口實作,類和接口都可通路接口中方法。顯式接口實作,隻能通過接口通路。