接口的显式实现

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();
        }
    }
原文地址:https://www.cnblogs.com/maomaodesu/p/11636466.html