C#中显式接口实现的优点是什么?

时间:2015-06-16 09:53:47

标签: c# inheritance interface implementation

C#支持用于区分具有相同名称的方法的内置机制。下面是一个简单的示例,说明了它的工作原理:

interface IVehicle{
    //identify vehicle by model, make, year
    void IdentifySelf();    
}

interface IRobot{
    //identify robot by name
    void IdentifySelf();
}

class TransformingRobot : IRobot, IVehicle{ 
    void IRobot.IdentifySelf(){
        Console.WriteLine("Robot");
    }

    void IVehicle.IdentifySelf(){
       Console.WriteLine("Vehicle");
    }
}

这种区别的用例或好处是什么?我是否真的需要在实现类时区分抽象方法?

1 个答案:

答案 0 :(得分:1)

在你的情况下,没有真正的好处,实际上有两个这样的方法只会让用户感到困惑。但是,当你有:

时,它们是关键
interface IVehicle
{
    CarDetails IdentifySelf();    
}

interface IRobot
{
    string IdentifySelf();
}

现在我们有两个同名的方法,但返回类型不同。因此它们不能被重载(重载忽略返回类型),但可以显式引用它们:

class TransformingRobot : IRobot, IVehicle
{
    string IRobot.IdentifySelf()
    {
        return "Robot";
    }

    CarDetails IVehicle.IdentifySelf()
    {
        return new CarDetails("Vehicle");
    }
}