• 温故知新:接口的隐式实现与显式实现


    这二者的区别,仅在一个类同时实现多个接口,且多个接口中有相同的方法名字定义时,才有比较的意义。

    using System;
    
    namespace InterfaceTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestAB ab = new TestAB();
                ab.HelloWorld(); //Hello World!           
    
                IB b = ab as IB;
                b.HelloWorld(); //IB.HelloWorld!
    
                IA a = ab as IA;
                a.HelloWorld(); //IA.HelloWorld!
    
                Console.Read();
            }
        }
    
        //IA的接口定义
        interface IA
        {
            void HelloWorld();
        }
    
        //IB的接口定义
        interface IB
        {
            void HelloWorld();
        }
    
        class TestAB : IA, IB
        {
            //隐式实现IA与IB的HelloWorld方法
            public void HelloWorld()
            {
                Console.WriteLine("Hello World!");            
            }
    
            //显式实现IB接口的HelloWorld方法
            void IB.HelloWorld()
            {
                Console.WriteLine("IB.HelloWorld!");
            }
    
            //显式实现IA接口的HelloWorld方法
            void IA.HelloWorld()
            {
                Console.WriteLine("IA.HelloWorld!");
            }       
        }
    }
    
    

    输出结果已经说明了问题,就不多做解释了。

    结论:

    1、对于显式实现的接口方法,在类实例上调用时,需要显式转换为指定的接口,然后才能正确调用。

    2、如果类实例不显式转换接口,直接用"类实例.接口同名方法"调用,将调用隐式实现的方法.

    3、显式实现的接口方法,不能加public之类的关键字修饰。

    4、通常显式实现并非必需的步骤.(本例中,可以去掉IA或IB的显式实现部分,甚至这二个显式实现都可以去掉,然后再观察下输出结果)

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
    Codeforces Goodbye 2018
    ubuntu 百度云
    【UOJ 351】新年的叶子
    【SDOI2008】仪仗队
    NOI 2002 贪吃的九头龙
    最大获利
    codeforces 814E An unavoidable detour for home
    codeforces 814D An overnight dance in discotheque
    bzoj3191 [JLOI2013]卡牌游戏
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1831327.html
Copyright © 2020-2023  润新知