Добавить в корзинуПозвонить
Найти в Дзене

Делегаты, события и замыкания

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-деле

Делегаты, события и замыкания

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.

#новости