电影中的主角里昂有两重身份,在外人看来他是一个绅士,但实际上他还是一个冷酷的杀手。我们根据这两种身份定义两个接口:IGentleman 和 IKiller。
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