我有子弹:泛型协方差变通办法?
public LaserBullets : Projectile
我有枪,从与与派生枪响子弹型基武器继承:
public LaserWeapon : Weapon<LaserBullets>
我必须建立在当前武器属性玩家的:
public Weapon<Projectile> CurrentWeapon
{
set { currentWeapon = value; }
}
这失败(不能隐式转换LaserWeapon
到Weapon<Projectile>
)
player.CurrentWeapon = new LaserWeapon();
我读过关于不支持C#中的某些协方差,但我不想认为我卡在这里。有什么方法可以让我的情况发挥作用吗?我试图在玩家类中保持基础武器,但在另一个类中使用更具体的武器。
我试着为LaserWeapon创建自己的投射操作符,但是我得到了无法投射到基类的错误。
我以为这会奏效,但我会承认你没说的。如果你制作武器的'Weapon'基础类是什么?然后让'CurrentWeapon'只是一个'Weapon'? –
2012-07-22 22:44:38
我会看到它的。但是这可能是个问题,因为武器有一个抽象方法Fire()返回TProjectile。 'Player'在基类上调用这个方法。这导致另一种类型的协方差问题,其中指定基本返回类型并用派生返回类型重写也具有编译时问题。 –
2012-07-22 22:55:34
我相信@JonathonReinhart是正确的 - 根据我的经验,在这种情况下,我总是使用非泛型基类或接口。 – 2012-07-22 22:56:24