https://www.youtube.com/watch?v=aGr9dGLq5qc - смотреть тут:)
👉 Сильно старался донести все максимально доходчиво, начиная с самого начала) Поэтому надеюсь вы поддержите видос, лайком, комментарием и временем просмотра)
👉 В комментариях лежит обещанный проект с инкапсулированной реализацией примера и небольшая пояснялка
👉 А также как обещал в видео (обязательно посмотрите) на днях начнем обсуждать тему безопасного сравнения объектов, так что будьте готовы:)
Ставьте 🔥 если ждете больше контента:)
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Это изменит твой подход к разработке игр! Реактивность в Unity. Разбираемся с 0
⚡️⚡️⚡️ Полезные ссылки ⚡️⚡️⚡️
🔎 https://yakovlevgamedev.ru - обучение разработке игр (запись на следующий поток стартует в августе)
🔎 https://t.me/yakovlev_gamedev - основной telegram канал (тут лежит проект и будет обсуждение темы из видео)
🔎 https://y…
🔎 https://yakovlevgamedev.ru - обучение разработке игр (запись на следующий поток стартует в августе)
🔎 https://t.me/yakovlev_gamedev - основной telegram канал (тут лежит проект и будет обсуждение темы из видео)
🔎 https://y…
🔥71👍6🐳4💯1
Начинаем обсуждать момент, освещенный в последнем видео по реактивности. А именно проблему сравнения объектов, которая там возникает.
Если не смотрели последний видос, то обязательно посмотрите:) Ну и
Мы знаем, что все типы в .NET, в том числе value type, такие как float, int и тп. являются неявно унаследованными от класса Object.
Т.е. это значит, что любой объект (неважно value type или reference type) мы можем скастить к типу object без зазрения совести
int number = 42;
object obj = number;
И смотрите в чем тут интересность. Дело в том, что object – это класс, а значит все таки ссылочный тип.
И получается, что я каким-то образом, int, который является структурой, т.е. value type могу засунуть в reference type переменную - как это вообще возможно?
Так вот как раз такой процесс, когда мы value type кастим к ссылочному типу, т.е. процесс преобразования value type значения к reference type и называется упаковкой (boxing).
А когда я делаю обратную операцию, т.е. пытаюсь ссылочный тип скастить к valueType обратно, то происходит распаковка (unboxing)
int number = 42; // Значимый тип
object obj = number; //boxing (упаковка)
int unboxedNumber = (int)obj; //unboxing (распаковка)
И на первый взгляд ничего плохо нет, все работает, компилятор не жалуется, но не все так просто:)
Упаковка и распаковка вызывают накладные расходы по производительности, т.е. магии не происходит. При боксинге в куче выделяется новый объект, в который упаковывается значение, а процесс анбоксинга извлекает тип данных из созданного объекта (фактически создается просто новый ненужный объект в куче каждый раз). Т.е. понимаете, да? Тут все не так просто как при обычном касте тех же классов и частые подобные процессы могут генерировать кучу мусора, которую сборщик мусора должен будет разгрести
Кроме того подобные ситуации возникают и при реализации интерфейсов на структурах, так что надо быть осторожным (но это отдельный вопрос, не будем его пока трогать)
Напомню, что выглядела она вот так:
if(_value.Equals(oldValue) == false)
Changed?.Invoke(oldValue, _value);
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤7👍4🐳3