2016-08-11 3 views
1

У меня есть базовая функция void под названием Update(), которая должна определить, нужно ли обрабатывать переопределение Update(). Как я понимаю, простое возвращение; в базовой функции останавливается только базовая функция, а не переопределение. Итак, есть ли способ сделать это, не записывая ничего больше, чем base.Update() в переопределении?Остановка функции переопределения из базовой функции

protected virtual void Update() 
{ 
    if (someArgument) 
    { 
     //Some code to stop the override from being processed 
    } 
} 

protected override void Update() 
{ 
    base.Update(); //It would be great if I didn't need to write anything more than this line to stop the override function 
    //Some other code 
} 
+0

Не могли бы вы переделать его так, чтобы 'Update' возвращал' bool', чтобы указать, какое условие это происходит в базовом методе? – juharr

+0

Нет, я боюсь, Update() должен быть недействительным, поскольку это функция, встроенная в движок. – Kullis

+0

В этом случае кажется, что все, что вы действительно можете сделать, это проверить то же самое условие после запуска базового метода. – juharr

ответ

2

Хорошо, если у вас есть другой метод, который является виртуальным, вы можете решить, следует ли вызывать метод переопределения. Что-то вроде этого. Но вы не можете из базового класса прекратить выполнение переопределенных методов.

class BaseClass 
{ 
    protected void Update() 
    { 
     if(someArgument) 
     { 
      this.InnerUpdate(); 
     } 
    } 

    protected virtual void InnerUpdate() 
    { 
    } 
} 

class Foo : BaseClass 
{ 
    protected override void InnerUpdate() 
    { 
     //Some other code 
    } 
} 
+0

Отличная идея! Это прекрасно решает мою проблему! Большое спасибо :) – Kullis

Смежные вопросы