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

  • 相关阅读:
    MySQL基础(3):进阶用法
    MySQL基础(2):DDL语言
    MySQL基础(1):基本语法
    Linux中配置ftp传输
    Eclipse插件安装的三种方法
    C++中string,wstring,CString的基本概念和用法
    程序员的谈判技巧
    转:C++编程隐蔽错误:error C2533: 构造函数不能有返回类型
    CMake入门以及学习笔记
    程序员的学习方法
  • 原文地址:https://www.cnblogs.com/xinxinzhihuo/p/6306224.html
Copyright © 2011-2022 走看看