C#:用《这个杀手不太冷》理解显式实现接口

103 阅读1分钟

电影中的主角里昂有两重身份,在外人看来他是一个绅士,但实际上他还是一个冷酷的杀手。我们根据这两种身份定义两个接口:IGentlemanIKiller

interface IGentleman{
    void Love();
}

interface IKiller{
    void Kill();
}

里昂实现这两个接口,作为绅士,他有Love的能力,作为杀手,他有Kill的能力:

class Leon : IGentleman, IKiller{
    public void Love(){
        Console.WriteLine("I will love you for ever ...");
    }

    public void Kill(){
        Console.WriteLine("Let me kill the enemy ...");
    }
}

但是这样一来,任何人都可以轻易地发现里昂作为杀手的身份,这当然不是他想要的:

static void Main(string[] args)
{
    Leon leon = new Leon();
    leon.Love();
    leon.Kill();
}

因此我们可以选择显式实现Killer接口:

class Leon : IGentleman, IKiller
{
    //...
    
    void IKiller.Kill()
    {
        Console.WriteLine("Let me kill the enemy ...");
    }
}

这样只有使用IKiller类型的变量来引用Leon时,Kill方法才能被调用:

static void Main(string[] args)
{
    Leon leon = new Leon();
    leon.Love();

    IKiller killer = leon;
    killer.Kill();
}

参考:C#语言入门详解029