当一个类实现接口的方法是有两种方式,第一种就是直接实现,第二种显示实现,但是一般用的比较多的是第一种。
那么为什么要弄一个接口方法的显示实现呢?主要原因是,如果一个类需要显示多个接口,这些接口有同名方法,这个时候普通的实现就无法解决这个问题,用显示实现就能解决这个问题。
class Test: ITest1,ITest2 { //在实现上面两个接口的时候出现同名的情况,如果使用第一种,实现方式,无法区分这个实现的这个个方式是那个接口中的 } interface ITest1 { void Method1(); } interface ITest2 { void Methid1(); }
如何显示的实现接口方法,其实就是一句话把方法名称前加个接口名称 接口名.方法名
class Test: ITest1,ITest2 { //在实现上面两个接口的时候出现同名的情况,如果使用第一种,实现方式,无法区分这个实现的这个个方式是那个接口中的 void ITest1.Method1() //ITest1中的方法 { } void ITest2.Methid1() //ITest2中的方法 { } } interface ITest1 { void Method1(); } interface ITest2 { void Methid1(); }
那么如何调用这些显示实现的方法呢?
(1) 显示实现的接口方法在类中都是私有的,直接new出来的实例中是无法获取到这些方法的(如图,Test的实例中实现的接口方法在智能提示中是没有的)
(2)调用时需要把实例先转型成接口类型在调用(这么做的原因跟上面一样,如果能直接就调用因为方法名字都一样,程序无法得知具体是调用那个方法,在转型后,接口中的方法只有一个,就能知道掉用的具体方法了
static void Main() { Test test = new Test(); (test as ITest1).Method1(); //显示的结果是 ITest1.Method1 (test as ITest2).Methid1(); //显示的结果是 ITest2.Methid1 Console.ReadKey(); }
class Test: ITest1,ITest2 { //在实现上面两个接口的时候出现同名的情况,如果使用第一种,实现方式,无法区分这个实现的这个个方式是那个接口中的 void ITest1.Method1() { Console.Write("ITest1.Method1"); } void ITest2.Methid1() { Console.Write(" ITest2.Methid1"); } } interface ITest1 { void Method1(); } interface ITest2 { void Methid1(); }
我最开始接触的时候感觉很神奇,但是在实际使用中建议,尽量避免使用这种显示的实现,对于没有初次看代码的人来说,会让人感觉莫名奇妙,明明在类中实现了这个方法,为什么在new出来的实例中竟然找不到该方法。