Введение в свойства Unity
Unity Properties — это система, которая позволяет исследовать и модифицировать свойства типов C# во время выполнения. Она использует API в стиле посетителя, который обходит свойства графа объекта предсказуемым, контролируемым образом.
Вы можете использовать свойства Unity для чтения и записи типов C# в общем виде, с минимальным обращением с типами. Это позволяет работать с пользовательскими типами C# и, например, проверять их или преобразовывать между различными представлениями.
Unity Свойства позволяют избежать или минимизировать отражение, которое относительно медленно, выделяет память (что увеличивает нагрузку на сборщик мусора) и имеет ограниченную поддержку, особенно на платформах, которые требуют предварительной (AOT) компиляции с IL2CPP.
Свойства Unity могут быть полезны в следующих типичных сценариях:
- Проверка и обработка данных:
- Пересечение графа объектов для проверки диапазонов, нулей, ссылок или применения ограничений.
- Вычисление различий, хэшей или обнаружение изменений в свойствах.
- Копирование, клонирование и патч:
- Глубинное копирование контейнеров или применение патчей путем посещения и копирования конкретных свойств.
- Преобразование данных автора в данные времени выполнения:
- Например, преобразование конфигурационных данных ScriptableObject в структуры времени выполнения) с помощью перехода через свойства.
Основные особенности
Фреймворк Unity Properties имеет следующие основные возможности, которые можно использовать для общей обработки данных типа C#:
- Сумки для имущества: год
IPropertyBag<T>описывает поля и свойства типаT. Unity генерирует пакеты свойств, чтобы система могла перечислить свойства вашего типа. - Visitors: Вы реализуете посетителя с обратными вызовами, такими как
Visit<TContainer, TValue>. Фреймворк проходит через свойства контейнера и вызывает логику по каждому свойству. - Адаптеры: ловушки, которые настраивают, как конкретные типы посещаются или преобразуются (например, специальная обработка для
Vector3, энумов, коллекций). - Пути свойств и перемещение: Поддержка вложенных контейнеров, массивов, словарей и адресации значений через пути с контролируемой глубиной и параметрами.
Более подробные примеры совместного использования этих функций см. в Используйте PropertyVisitor для создания посетителя объекта и Используйте низкоуровневую APIs для создания посетителя объекта.