Отложенная обработка событий - C#
Формулировка задачи:
Здравствуйте, предположим, у нас есть
Логика
иОтображение
. Отображение подписано на событиеНовыйОбъект
, рассылаемоеЛогикой
и когда оно происходитОтображение
рендерит новый объект. Это означает, что методОтображения
, рендерящийНовыйОбъект
, будет вызван непосредственно при выполнении кодаЛогики
. Мне это не нравится по религиозным причинам, хотелось бы, что бы кодОтображения
выполнялся только когда придет его черед, а не во времявыполнения
Логики
. Пока решил создать List и добавлять тудаНовыеОбъекты
во время выполнения Логики, а после перебирать его в цикле и рендеритьНовыеОбъекты
. Между итерациями List очищается. Я не уверен на сколько это медленнее чем события, но то что менее удобно - это точно. Есть ли другие способы?Решение задачи: «Отложенная обработка событий»
textual
Листинг программы
- class Logic
- {
- public event BombExplosion;
- public List<Bomb> Bombs = new List<Bomb>();
- public BombBoom(Bomb b)
- {
- //тут происходит обработка логики взрыва и помечаем все бомбы, которые взорвались
- // статусом "Взрывается"
- foreach(Bomb b in this){
- if(...) b.status = BompStatus.Detoneted; }
- //только после обработки вызываем метод/событие
- if(BombExplosion!=null) BombExplosion(this.Where(w=>w.status == BompStatus.Detoneted).ToList());
- }
- }
- public enum BompStatus{
- Visible, Unvisible, Detoneted, Destroyed
- }
- class Bomb {
- public BompStatus status
- }
- class Render
- {
- public void RenderBombExplosion(Bombs bomb)
- {
- // и тут рендерим все сдетонировавшие бомбы
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д