zoukankan      html  css  js  c++  java
  • 【c# 学习笔记】显示接口实现方法

      在接口  一张中,使用了隐式的接口实现方式,即在实现代码中没有制定实现那个接口中的CompareTo方法。相应地,自然就有显式的

    接口实现方式,它指的是在实现过程中,明确指出实现哪一个接口中的哪一个方法。

      当多个接口中包含相同方法名称、相同返回类型和相同参数时,如果一个类同时实现了这些接口,隐式的接口实现就会出现命名冲突的

    问题。如下演示:

      

        interface IChineseGreeting
        {
            void SayHello();
    
        }
    
        interface IAmericanGreeting
        {
            void SayHello();
        }
    
        public class Speaker:IChineseGreeting,IAmericanGreeting
        {
            public void SayHello()
            {
                Console.WriteLine("你好");
            }
        }

            static void Main(string[] args)
            {
    
                Speaker speaker = new Speaker();
    
                //调用中国人打招呼方法
                IChineseGreeting iChineseG = (IChineseGreeting)speaker;
                iChineseG.SayHello();
    
                //调用美国人的打招呼方法
                IAmericanGreeting iAmericanG = (IAmericanGreeting)speaker;
                iAmericanG.SayHello();
    
                Console.Read();
            }

      以上代码定义了一个Speaker类,它实现了两个接口,并且这两个接口声明的方法具有相同的

    返回类型、相同的方法名称和相同的参数(演示都无参数)。若采用隐式的接口实现方式,将调用相同的SayHello()方法,而不管是获取了那个接口。

      

       从运行结果可以发现,不管获得了那个接口,程序都是调用的同一个方法实现,即都输出“你好”。但我们期望的并不是这样,我们希望调用IAmericanGreeting

    接口的Sayhello()时能够输出的是“Hello”,而调用IChineseGreeting接口的SayHello方法时才输出“你好”。

         显示的接口实现方式可以解决这样的命名冲突问题,如下:

      

        public class Speaker:IChineseGreeting,IAmericanGreeting
        {
             void IChineseGreeting.SayHello()
            {
                Console.WriteLine("你好");
            }
             void IAmericanGreeting.SayHello()
            {
                Console.WriteLine("Hello");
            }
    
    
        }



      运行结果如下: 

     

      在使用显式的接口实现方式时,需要注意以下几个问题。

        1.若使用显式实现接口,方法不能使用任何访问修饰符,显式实现的成员都默认为私有。如下:

        

        2.显式实现的成员默认是私有的,所以这些成员都不能通过类的对象进行访问。

        

      分析了隐式接口与显式接口的实现方式,如下几点是对其使用场景总结:

        1.采用隐式接口实现时,类和接口都可以访问接口中的方法;而若采用显式接口实现方式,接口方法只能通过接口来完成访问,因为此时接口方法默认为私有。

        2.当类实现单个接口时,通常使用隐式接口实现方法,这样类的对象可以直接去访问接口方法。

        3.当类实现了多个接口,并且接口中包含相同的方法名称、参数和返回类型时,则应使用显式接口实现方式。即使没有使用相同的方法前面,在实现多个接口时,仍推荐使用显式的方式,因为这样可以标识出哪个方法属于哪个接口。

      

  • 相关阅读:
    运输层:广播和多播
    ICMP:internet控制报文协议 PING
    traceroute 命令
    网络层:IP网际协议 ifconfig -a
    IP层:IP选路
    动态选路协议
    链路层:ARP和RARP命令arp -a/tcpdump -en
    链路层协议以及常用命令介绍netstat
    TCP/IP笔记
    0-1背包问题——回溯法
  • 原文地址:https://www.cnblogs.com/xiaoyehack/p/9231880.html
Copyright © 2011-2022 走看看