C#中接口方法的显示实现

当一个类实现接口的方法是有两种方式,第一种就是直接实现,第二种显示实现,但是一般用的比较多的是第一种。

 

 

那么为什么要弄一个接口方法的显示实现呢?主要原因是,如果一个类需要显示多个接口,这些接口有同名方法,这个时候普通的实现就无法解决这个问题,用显示实现就能解决这个问题。

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出来的实例中竟然找不到该方法。

posted @ 2017-01-19 13:29  haohaizi  阅读(7290)  评论(1编辑  收藏  举报