C# - 使用子类实现接口

C# - Using subclasses to implement interfaces

我有以下接口

    public interface IPrice
    {
        int Price { get; }
    }

    public interface IGear : IPrice
    {
        GearUpgrade Upgrades { get; }
    }

及以下类

    public class GearUpgrade : IPrice
    {
        public int Price
        {
            get { return price; }
            set { price = value; }

        }
    }

    public class ArmorUpgrade : GearUpgrade
    {
    }

    public class ShieldUpgrade : GearUpgrade
    {
    }

    public class WeaponUpgrade : GearUpgrade
    {
    }

所以当我尝试实现这样的 IGear 时...

    public class Armor : IGear
    {
        private int price = 0;
        public int Price { get => price; }

        private ArmorUpgrade upgrades;
        public ArmorUpgrade Upgrades
        {
            get { return upgrades; }
            set { upgrades = value; }
        }

    }

我收到以下错误:

'Armor' does not implement interface member 'IGear.Upgrades'. 'Armor.Upgrades' cannot implement 'IGear.Upgrades' because it does not have the matching return type of 'GearUpgrade'.

我想如果Upgrades来自GearUpgrade的子类,接口应该被实现,但显然不是......我是否做了错误的假设?

为了实现接口,方法签名必须完全匹配:C# 不隐式应用协变和逆变。

这是一个允许 Armor 实现 IGear 接口而不干扰 class 的简单修复:

public class Armor : IGear
{
    private int price = 0;
    public int Price { get => price; }

    private ArmorUpgrade upgrades;
    public ArmorUpgrade Upgrades
    {
        get { return upgrades; }
        set { upgrades = value; }
    }

    GearUpgrade IGear.Upgrades => this.Upgrades;
}