有时候,代码要胜过大篇幅的文字描述.
public interface ITest1
{
void Method();
}
public interface ITest2
{
void Method();
}
/// ITest1,ITest2共享Method的实现
/// </summary>
public class MyInterfaceTest1:ITest1,ITest2
{
{
Console.WriteLine("MyInterfaceTest1.Method");
}
}
/// ITest1,ITest2单独调用其各自的实现,且不会调用public void Method(),
/// class MyInterfaceTest2类型的引用无法访问其接口方法
/// </summary>
public class MyInterfaceTest2:ITest1,ITest2
{
{
Console.WriteLine("MyInterfaceTest2.Method");
}
{
this.Method();// return "MyInterfaceTest2.Method",这个地方很好玩,本以为是调用ITest1.Method()
Console.WriteLine("ITest1.Method");
}
{
Console.WriteLine("ITest2.Method");
}
{
void Method();
}
public interface ITest2
{
void Method();
}
/// <summary>
/// ITest1,ITest2共享Method的实现
/// </summary>
public class MyInterfaceTest1:ITest1,ITest2
{
public void Method()
{
Console.WriteLine("MyInterfaceTest1.Method");
}
}
/// <summary>
/// ITest1,ITest2单独调用其各自的实现,且不会调用public void Method(),
/// class MyInterfaceTest2类型的引用无法访问其接口方法
/// </summary>
public class MyInterfaceTest2:ITest1,ITest2
{
public void Method()
{
Console.WriteLine("MyInterfaceTest2.Method");
}
void ITest1.Method()
{
this.Method();// return "MyInterfaceTest2.Method",这个地方很好玩,本以为是调用ITest1.Method()
Console.WriteLine("ITest1.Method");
}
void ITest2.Method()
{
Console.WriteLine("ITest2.Method");
}
}
}
简单说明一下,
当一个类实现具有相同方法的两个接口时
方法中没有指定接口名,则共享同一实现,否则,接口调用他的显示实现.
而类实例是无法调用其接口的显示实现的 例如
上文中,如果注释掉
public void Method()
{
Console.WriteLine("MyInterfaceTest2.Method");
}
MyInterfaceTest2 myt2=new MyInterfaceTest2();
myt2. Method();//错误