我有子彈:泛型協方差變通辦法?
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