繁体   English   中英

如果一个类实现了两个扩展同一个基接口的接口会发生什么?

[英]What happens if a class implements two interfaces that extend the same base interface?

考虑 C# 中的以下接口:

public interface IUpgradeable 
{
    public void Upgrade();
}

public interface ISpeedUpgradeable : IUpgradeable
{
    public int GetCurrentSpeed();
}

public interface IDamageUpgradeable : IUpgradeable
{
    public float GetCurrentDamage();
}

以及实现它们的以下类:

public class SpaceShip : ISpeedUpgradeable, IDamageUpgradeable
{
    public int GetCurrentSpeed() 
    { 
        return 0;
    }

    public float GetCurrentDamage()
    {
        return 0f;
    }

    public void Upgrade()
    {
        //Which Upgrade am I implementing? ISpeedUpgradeable? or IDamageUpgradeable?
    }
}

由于ISpeedUpgradeableIDamageUpgradeable都扩展IUpgradeable ,它们不应该都有Upgrade()的实现吗? 还是我误解了接口中的继承是如何工作的?

IUpgradeable只有一种含义。 多个接口继承它并为自己添加含义的事实不会改变原始接口的含义。 你的类只是实现ISpeedUpgradeableIDamageUpgradeableIUpgradeable :它没有实现IUpgradeable的特定风格

Upgrade()方法应该只意味着它对IUpgradeable接口的意义。 想想你的商业模式(或者在这种情况下可能是一个游戏模式):是否有一个浮动的项目可以“升级”它接触到的任何可升级的东西? 升级船意味着升级它的速度,或损坏,或两者兼而有之? 如果简单地调用Upgrade不能提供足够的信息来匹配您的业务模型的工作方式,您可能需要重新考虑您的界面设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM