Вы делаете это по-другому ... скорее весь ваш Fire()
метод, вероятно, должен принимать базовое представление, как показано ниже, а затем в вашем конкретном методе вы можете привести его соответственно
void Fire(BaseWeapon weapon)
Более того, когда вы заранее знаете тип, вместо выполнения условия if
вы, вероятно, можете просто сказать
Fire((MeleeWeapon)currentWeapon);