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();
            }
        }
    
  • 相关阅读:
    哈希表
    c++中的虚函数
    struct并不报错
    c风格的字符串
    动态数组
    常量指针和指针常量
    关于struct和typedef struct
    常量成员函数
    关于free的使用疑惑
    mutable用于修改const成员函数中的成员变量
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/11636466.html
Copyright © 2011-2022 走看看