关于继承:C#中显式接口实现的优点是什么?

What are the advantages of explicit interface implementation in C#?

本问题已经有最佳答案,请猛点这里访问。

C支持用于区分同名方法的内置机制。下面是一个简单的例子,展示了它的工作原理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
2
3
4
5
6
7
8
9
interface IVehicle
{
    CarDetails IdentifySelf();    
}

interface IRobot
{
    string IdentifySelf();
}

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

1
2
3
4
5
6
7
8
9
10
11
12
class TransformingRobot : IRobot, IVehicle
{
    string IRobot.IdentifySelf()
    {
        return"Robot";
    }

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