https://www.youtube.com/watch?v=za91AjX-V7M
Неплохое видео про делегаты. Единственное что важно воспринимать именно так как объяснил автор в двух словах с замыканиями (так как мне знакомый задал вопрос). Конкретно этот пример:
// Mistake #2: Capturing This Implicitly
void SetupTemporaryCallback()
{
// This lambda implicitly captures `this`
Action callback = () => Debug.Log($"Enemy name: {name}");
callback?.Invoke();
}Мне задали вопрос по формулировке автора, а что тут создается целиком копия объекта? Нет, создается "объект замыкания" (он довольно небольшой) со ссылкой на исходный объект. И в этом появляются две проблемы:
1) Вызывать часто = куча мелких аллокаций
2) Не совсем очевидно когда объект можно будет собрать сборщиком мусора, он дольше задержится в памяти, потенциальный мемори лик.
А так видео хорошее, и инверсию управления затронули и так далее. Я бы ещё сказал, что сейчас ключевым словом delegate почти не пользуются. Как и анонимными делегатами. С появлением generic-делегатов, а точнее Action<T> и Func<T> в .Net 3.5 что ли. Это банально удобнее, да и статическую таблицу типов не засоряем лишними типами, хотя это не так важно. UnityEvent и UnityAction - те же generic-делегаты, только связанные с системой сериализации Unity.
#новости