接口实现的一些细节

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

     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();//错误

 

你可能感兴趣的:(接口)