Отложенная обработка событий - 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)
{
// и тут рендерим все сдетонировавшие бомбы
}
}