接口实现的一些细节
有时候,代码要胜过大篇幅的文字描述.
public interface ITest1
{
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");
}
}
}
{
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();//错误
版权声明:本文原创发表于 博客园,作者为 imbob,博客 http://imbob.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。