這二者的區別,僅在一個類同時實現多個接口,且多個接口中有相同的方法名字定義時,才有比較的意義。
using System;
namespace InterfaceTest
{
class Program
{
static void Main(string[] args)
{
TestAB ab = new TestAB();
ab.HelloWorld(); //Hello World!
IB b = ab as IB;
b.HelloWorld(); //IB.HelloWorld!
IA a = ab as IA;
a.HelloWorld(); //IA.HelloWorld!
Console.Read();
}
}
//IA的接口定義
interface IA
{
void HelloWorld();
}
//IB的接口定義
interface IB
{
void HelloWorld();
}
class TestAB : IA, IB
{
//隱式實現IA與IB的HelloWorld方法
public void HelloWorld()
{
Console.WriteLine("Hello World!");
}
//顯式實現IB接口的HelloWorld方法
void IB.HelloWorld()
{
Console.WriteLine("IB.HelloWorld!");
}
//顯式實現IA接口的HelloWorld方法
void IA.HelloWorld()
{
Console.WriteLine("IA.HelloWorld!");
}
}
}
輸出結果已經說明了問題,就不多做解釋了。
結論:
1、對於顯式實現的接口方法,在類實例上調用時,需要顯式轉換為指定的接口,然后才能正確調用。
2、如果類實例不顯式轉換接口,直接用"類實例.接口同名方法"調用,將調用隱式實現的方法.
3、顯式實現的接口方法,不能加public之類的關鍵字修飾。
4、通常顯式實現並非必需的步驟.(本例中,可以去掉IA或IB的顯式實現部分,甚至這二個顯式實現都可以去掉,然后再觀察下輸出結果)
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。