當一個類實現接口的方法是有兩種方式,第一種就是直接實現,第二種顯示實現,但是一般用的比較多的是第一種。
那么為什么要弄一個接口方法的顯示實現呢?主要原因是,如果一個類需要顯示多個接口,這些接口有同名方法,這個時候普通的實現就無法解決這個問題,用顯示實現就能解決這個問題。
class Test: ITest1,ITest2 { //在實現上面兩個接口的時候出現同名的情況,如果使用第一種,實現方式,無法區分這個實現的這個個方式是那個接口中的 } interface ITest1 { void Method1(); } interface ITest2 { void Methid1(); }
如何顯示的實現接口方法,其實就是一句話把方法名稱前加個接口名稱 接口名.方法名
class Test: ITest1,ITest2 { //在實現上面兩個接口的時候出現同名的情況,如果使用第一種,實現方式,無法區分這個實現的這個個方式是那個接口中的 void ITest1.Method1() //ITest1中的方法 { } void ITest2.Methid1() //ITest2中的方法 { } } interface ITest1 { void Method1(); } interface ITest2 { void Methid1(); }
那么如何調用這些顯示實現的方法呢?
(1) 顯示實現的接口方法在類中都是私有的,直接new出來的實例中是無法獲取到這些方法的(如圖,Test的實例中實現的接口方法在智能提示中是沒有的)
(2)調用時需要把實例先轉型成接口類型在調用(這么做的原因跟上面一樣,如果能直接就調用因為方法名字都一樣,程序無法得知具體是調用那個方法,在轉型后,接口中的方法只有一個,就能知道掉用的具體方法了
static void Main() { Test test = new Test(); (test as ITest1).Method1(); //顯示的結果是 ITest1.Method1 (test as ITest2).Methid1(); //顯示的結果是 ITest2.Methid1 Console.ReadKey(); }
class Test: ITest1,ITest2 { //在實現上面兩個接口的時候出現同名的情況,如果使用第一種,實現方式,無法區分這個實現的這個個方式是那個接口中的 void ITest1.Method1() { Console.Write("ITest1.Method1"); } void ITest2.Methid1() { Console.Write(" ITest2.Methid1"); } } interface ITest1 { void Method1(); } interface ITest2 { void Methid1(); }
我最開始接觸的時候感覺很神奇,但是在實際使用中建議,盡量避免使用這種顯示的實現,對於沒有初次看代碼的人來說,會讓人感覺莫名奇妙,明明在類中實現了這個方法,為什么在new出來的實例中竟然找不到該方法。