Методы перегрузки автокастинга - PullRequest
0 голосов
/ 29 апреля 2018

Привет, мне было интересно, есть ли другой способ сделать это автоматически

if (currentWeapon is MeleeWeapon)
        Fire(currentWeapon as MeleeWeapon);
    else if (currentWeapon is GunWeapon)
        Fire(currentWeapon as GunWeapon);
    else if (currentWeapon is MachineGun)
        Fire(currentWeapon as MachineGun);

Все вызываемые методы перегружены следующим образом:

void Fire(MeleeWeapon weapon)
void Fire(GunWeapon weapon)
void Fire(MachineGun weapon)

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Скорее всего, вам нужен абстрактный базовый класс Weapon с виртуальным методом Fire().

Тогда вы можете получить экземпляр производного класса и использовать его следующим образом (пример):

 Weapon currentWeapon = new MeeleWeapon();
 currentWeapon.Fire(); 
0 голосов
/ 29 апреля 2018

Вы делаете это по-другому ... скорее весь ваш Fire() метод, вероятно, должен принимать базовое представление, как показано ниже, а затем в вашем конкретном методе вы можете привести его соответственно

void Fire(BaseWeapon weapon)

Более того, когда вы заранее знаете тип, вместо выполнения условия if вы, вероятно, можете просто сказать

    Fire((MeleeWeapon)currentWeapon);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...