Пути свойств
Пути свойств представляют собой строки, описывающие расположение свойства в объекте контейнера.
Вы можете использовать пути свойств для получения или установки данных объекта на определенном пути или для принятия посетителя на подсвойстве объекта.
Пути свойств построены из строк и разрешают конкретный экземпляр свойства из корневого объекта. Например, путь foo.bar.baz[12] разрешает 13-й элемент контейнера списка baz в контейнере bar, который вложен внутри контейнера foo.
Для создания и изменения путей свойств используйте Unity.Properties.PropertyPath class.
Пути свойств можно использовать для выполнения следующих действий:
- Получить или установить данные объекта в определенном пути.
- Принятие посетителей в подсвойстве объекта.
Пример использования путей свойств для принятия посетителей в подсвойстве объекта см. в примере Использование PropertyVisitor для создания посетителя свойства.
Соображения, касающиеся эффективности
Unity.Properties.PropertyPath — неизменяемый структурный тип. Когда вы строите путь свойства из строки, происходят выделения памяти для извлечения подстрок.
В следующей таблице перечислены поведения выделения при построении пути свойства из строки:
| Струна | Длина | Поведение распределения |
|---|---|---|
"Path" |
1 | Без выделения: весь путь является одним сегментом, и на исходную строку делается ссылка в том виде, в котором она есть. |
"Path.To" |
2 | Два распределения: выделение двух новых экземпляров подстроки для "Path" и "To" после разделения на разделители .. |
"Path.To[2]" |
3 | Три распределения: подстроки для "Path" и "To", плюс анализ/извлечение для индекса "[2]". |
"Path.To[2].My" |
4 | Четыре распределения: подстроки для "Path", "To"и "My", плюс анализ/извлечение для индекса "[2]". |
"Path.To[2].My.Value" |
5 | Шесть распределений: подстроки для "Path", "To", "My"и "Value", анализ/извлечение для "[2]"и распределение массива для хранения расширенных частей. |
PropertyPath представляет собой массив частей типа PropertyPathPart, и четыре части встроены непосредственно перед выделением массива для любых дополнительных частей. В следующей таблице перечислены поведения выделения при построении пути свойства из частей:
| Струна | Длина | Поведение распределения |
|---|---|---|
PropertyPath.FromName("Path") |
1 | Без распределения: использует первый встроенный PropertyPathPart. |
PropertyPath.AppendName(previous, "To") |
2 | Без распределения: использует второй встроенный PropertyPathPart. |
PropertyPath.AppendIndex(previous, 2) |
3 | Без распределения: использует третий встроенный PropertyPathPart. |
PropertyPath.AppendName(previous, "My") |
4 | Без распределения: использует четвертое встроенное PropertyPathPart. |
PropertyPath.AppendName(previous, "Value") |
5 | Одно выделение: выделяет новый массив, содержащий дополнительные части пути свойства. |
Чтобы оптимизировать производительность и избежать выделения памяти:
- Инициализация и кэширование путей свойств во время процедур инициализации.
- Объединение или добавление частей пути свойства вместо его построения из строки, до четырех частей.