接口实现的一些细节

有时候,代码要胜过大篇幅的文字描述.

    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");
        }


    }

}

 

简单说明一下,

当一个类实现具有相同方法的两个接口时

方法中没有指定接口名,则共享同一实现,否则,接口调用他的显示实现.

而类实例是无法调用其接口的显示实现的 例如

上文中,如果注释掉

        public void Method()
        {
            Console.WriteLine(
"MyInterfaceTest2.Method");
            
        }


MyInterfaceTest2 myt2=new  MyInterfaceTest2();

myt2. Method();//错误

 

posted on 2009-07-01 14:00  imbob  阅读(672)  评论(2编辑  收藏  举报

导航