zoukankan      html  css  js  c++  java
  • 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出来的实例中竟然找不到该方法。

  • 相关阅读:
    PHP 实现定时任务的几种方法
    ueditor 文本编辑器
    CodeIgniter 如何去掉 Index.php
    php 后台权限例子 (mysql 数据表)
    php ajax 下拉加载数据
    Codeforces 931.D Peculiar apple-tree
    Codeforces 931.C Laboratory Work
    Codeforces 932.F Escape Through Leaf
    bzoj2325 [ZJOI2011]道馆之战
    bzoj3611 [Heoi2014]大工程
  • 原文地址:https://www.cnblogs.com/xinxinzhihuo/p/6306224.html
Copyright © 2011-2022 走看看