zoukankan      html  css  js  c++  java
  • 接口的显式实现

    007中詹姆斯邦德表面是温文尔雅的绅士,其实是隐藏身份的特工。
    但是邦德出场的时,他需要隐藏身份,不暴露自己特工的身份。
    因此他的Kill()方法不能随便暴露,只有总部统计特工时他才会被发现有特工的能力。
    我们如果像平时一样定义詹姆斯邦德,那么就会暴露他的身份。

    interface IGentleman
        {
            void Talk ();
        }
    
        interface IAgent
        {
            void Kill();
        }
    
        class JamesBond : IGentleman,IAgent
        {
            public void Talk()
            {
                Console.WriteLine("Kiss my ass.");
            }
            public void Kill()
            {
                Console.WriteLine("Go hell!");
            }
        }
    

    这样定义是可以被发现Kill()方法暴露他身份的。

        class Program
        {
            static void Main(string[] args)
            {
                JamesBond Jb = new JamesBond();
                Jb.Talk();
                Jb.Kill();
            }
        }
    

    如何不随意的发现詹姆斯邦德的Kill()方法呢?
    我们只需要这样改动。
    原本是

            public void Kill()
            {
                Console.WriteLine("Go hell!");
            }
    

    改为

             void IAgent.Kill()
            {
                Console.WriteLine("Go hell!");
            }
    

    这样就可以只有在引用名为IAgent类时的引用名才可以调用到Kill()方法。

        class Program
        {
            static void Main(string[] args)
            {
                var Jb = new JamesBond();
                Jb.Talk();
                IAgent Agent = new JamesBond();//或者IAgent Agent = Jb;
                Agent.Kill();
            }
        }
    
  • 相关阅读:
    Stm32设置串口300波特率
    STM32F103ZET6移植FreeRTOS过程
    什么时候该用裸机?什么时候该用RTOS?
    又到了立flag时间
    关于掉电数据保存的心得
    一个教训
    下个月回国给自己定目标
    GPRS模块/4G开发过程
    ftp登陆失败,check pass; user unknown
    python深浅拷贝
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11636466.html
Copyright © 2011-2022 走看看