相关疑难解决方法(0)

为什么继承不以我认为它应该工作的方式工作?

我有一些继承问题,因为我有一组相互关联的抽象类,需要全部重写以创建客户端实现.理想情况下,我想做类似以下的事情:

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参数的协方差不应该起作用).对不起波动!我意识到这使得许多答案看起来无关紧要.

c# oop inheritance covariance contravariance

8
推荐指数
3
解决办法
1142
查看次数

标签 统计

c# ×1

contravariance ×1

covariance ×1

inheritance ×1

oop ×1