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"); } } |