我遇到了一些继承问题,因为我有一组相互关联的抽象类,需要一起重写以创建客户端实现。理想情况下,我想做以下事情:
abstract class Animal
{
public Leg GetLeg() {...}
}
abstract class Leg { }
class Dog : Animal
{
public override DogLeg Leg() {...}
}
class DogLeg : Leg { }
这将允许任何使用 Dog 类的人自动获取 DogLegs 并允许任何使用 Animal 类的人获取 Legs。问题是被覆盖的函数必须与基类具有相同的类型,因此无法编译。我不明白为什么不应该这样做,因为 DogLeg 可以隐式转换为 Leg。我知道有很多方法可以解决这个问题,但我更好奇为什么这不可能/在 C# 中实现。
编辑:我对此进行了一些修改,因为我实际上是在代码中使用属性而不是函数。
编辑:我把它改回函数,因为答案只适用于那种情况(属性的 set 函数的 value 参数的协方差不应该起作用)。波动请见谅!我意识到这让很多答案看起来无关紧要。