C井接口的顯式和隱式實現(轉自:http://blog.csdn.net/NETZHOU/archive/2008/01/22/2058464.aspx)
接口的實現分爲:隱式實現和顯式實現。如果類或者結構要實現的是單個接口,可以使用隱式實現,如果類或者結構繼承了多個接口那麼接口中相同名稱成員就要顯式實現。顯示實現是通過使用接口的完全限定名來實現接口成員的。
使用顯式接口成員執行體通常有兩個目的:
1、因爲顯式接口成員執行體不能通過類的實例進行訪問,這就可以從公有接口中把接口的實現部分單獨分離開。如果一個類只在內部使用該接口,而類的使用者不會直接使用到該接口,這種顯式接口成員執行體就可以起到作用。
2、顯式接口成員執行體避免了接口成員之間因爲同名而發生混淆。如果一個類希望對名稱和返回類型相同的接口成員採用不同的實現方式,這就必須要使用到顯式接口成員執行體。如果沒有顯式接口成員執行體,那麼對於名稱和返回類型不同的接口成員,類也無法進行實現。
示例:
//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!");
}
}
//調用
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!