@nano_e_t_4

Как вызвать прерывание в child классе?

Всем привет
Кто знает, как можно сделать остановить выполнение функции ребенка в родителе?
уточню на примере
class Number: MonoBehavior
    protected bool hasInteract
    public virtual void OnTriggerStay(Collider other)
    {
       if (hasInteract)
           return;
    } 

class One : Number
    public override void OnTriggerStay(Collider other)
    {
        base.OnTriggerStay(other);
        Debug.Log(other.gameobject.name)
    }


если hasInteract тру, то в объекте One все равно произойдет вызов функции дебаг. Как сделать так, чтобы вызов этой функции не происходил, потому что флаг выставлен в тру
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
mindtester
@mindtester
http://iczin.su/hexagram_48
1 - base.OnTriggerStay(other); ретурнит то из себя
2 - примерно так
class One : Number
    public override void OnTriggerStay(Collider other)
    {
       if (hasInteract)
           return;
       Debug.Log(other.gameobject.name)
    }

3 - upd .. ну и осознать суть override и base
4 - а еще отладчик можно освоить. в VS по F11 по шагам пройти и все понять )))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sofronov
А зачем? Просто в таком виде задача противоречит самому смыслу наследования.
Ребёнок всегда программируется после родителя для того чтобы получить новое, известное в момент написания поведение.
В данном случае, если нужно, чтобы не происходил вызов функции при определённом значении флага, значит перед вызовом нужно проверить значение флага. Благо он protected, а не private и доступен для ребёнка.
Если же дальнейшее поведение должно зависеть от более сложных условий, недоступных в детях - то нужно пересмотреть архитектуру и либо начать возвращать методом OnTriggerStay результат, либо добавить к типу параметра Collider поле, в которых указывать на необходимость дальнейшей обработки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы