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