Можно ли вызвать многоадресный ход и обработать возвращаемое значение каждого прикрепленного обработчика без распределения памяти?
фон
В схеме нормальных вещей Delegate [] , выделяемый MulticastDelegate.getInvocationList () , незначителен. Однако в некоторых случаях важно минимизировать распределения. Например, во время игрового процесса в играх Xbox, работающих на компактной структуре, каждый распределенный 1 МБ вызовет коллекцию и неприятную кадре. Необходимо итерации полного списка вызовов, поскольку пользователь может вернуть False < /code>, чтобы отменить ответ на столкновение из любого из прикрепленных обработчиков (и вызывая делегат без использования getInvocationlist () < /code> просто возвращает результат последнего прикрепленного обработчика). < /P>
Для Ссылки, код FAMSER in oquide: p> p> p> P> p> p> p> p> p> p> p> p> p>
.// Report the collision to both participants. Track which ones returned true so we can
// later call OnSeparation if the contact is disabled for a different reason.
if (FixtureA.OnCollision != null)
foreach (OnCollisionEventHandler handler in FixtureA.OnCollision.GetInvocationList())
enabledA = handler(FixtureA, FixtureB, this) && enabledA;
Подробнее здесь: https://stackoverflow.com/questions/243 ... round-this