Определенно не проверяйте тип здесь.
Большой вопрос: почему вы имеете дело с типом Weapon
, а затем вызываете StartCharging
в своем классе Game
? Подразумевается, что в этом коде все Оружие реализуют StartCharging - если они этого не делают, то вы уже отошли от хороших ООП.
Вместо этого я бы создал абстрактный метод, такой как Initialise
для оружия. - В ваших классах Бетонного оружия это реализуется по-разному, например для ChargedWeapon
вы бы использовали:
public override void Initialise()
{
StartCharging();
}
для разных видов оружия, реализация будет отличаться, например, Для HolsteredWeapon
это может быть:
public override void Initialise()
{
DrawWeapon();
}
В этом примере только классы ChargedWeapon
должны содержать метод StartCharging()
, и только классы HolsteredWeapon
должны содержать метод DrawWeapon()
. Однако каждому оружию нужен метод Initialise
.
Теперь базовый тип содержит только методы, которые применяются ко ВСЕМ конкретным реализациям, поэтому мы снова следуем хорошим принципам ОО.