如何解决C#-使用子类实现接口
我有以下界面
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'没有实现接口成员'IGear.Upgrades'。 'Armor.Upgrades'无法实现'IGear.Upgrades',因为它没有匹配的返回类型'GearUpgrade'。
我发现如果Upgrades
来自GearUpgrade
的子类,则应该实现该接口,但是显然不是。。。我是否做出了错误的假设?
解决方法
要实现该接口,方法签名必须完全匹配:C#不会隐式应用协方差和协方差。
这是一个简单的修复程序,它允许Armor
实现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; }
}
GearUpgrade IGear.Upgrades => this.Upgrades;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。