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!