溫故知新:接口的隱式實現與顯式實現


這二者的區別,僅在一個類同時實現多個接口,且多個接口中有相同的方法名字定義時,才有比較的意義。

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的顯式實現部分,甚至這二個顯式實現都可以去掉,然后再觀察下輸出結果)


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com