# 属性路径

> Understand the role of property paths and the performance considerations when using them.

属性路径是描述属性在容器对象中的位置的字符串。

## 概念##performance-considerations

可以使用属性路径获取或设置特定路径下的对象的数据，或接受对象子属性上的访问者。

属性路径是由字符串构成的，用于从一个根对象中解析出特定的属性实例。例如，路径 `foo.bar.baz[12]` 解析 `bar` 容器内 `baz` 列表容器的第 13 个元素，该元素嵌套在 `foo` 容器内。

要创建和操作属性路径，请使用 [`Unity.Properties.PropertyPath`](/engine/6000.0/script-reference/unity-properties/property-path.md) 类。

您可以使用属性路径来执行以下操作：

* 获取或设置特定路径下的对象的数据
* 接受对象的子属性上的访问者

## 性能注意事项##additional-resources

[`Unity.Properties.PropertyPath`](/engine/6000.0/script-reference/unity-properties/property-path.md) 是不可变的结构类型。从字符串构造属性路径时，会因为提取子字符串而发生内存分配。

下表列出了从字符串构建属性路径时的分配行为：

| String                  | 长度 | 分配 | 分配原因             |
| ----------------------- | -- | -- | ---------------- |
| `"Path"`                | 1  | 0  | 按原样使用字符串。        |
| `"Path.To"`             | 2  | 2  | 将字符串拆分为两部分。      |
| `"Path.To[2]"`          | 3  | 3  | 将字符串拆分为两部分并提取索引。 |
| `"Path.To[2].My"`       | 4  | 4  |                  |
| `"Path.To[2].My.Value"` | 5  | 6  | 为附加部分分配数组。       |

下表列出了从附加部分构建属性路径时的分配行为：

| String                                       | 长度 | 分配 | 分配原因       |
| -------------------------------------------- | -- | -- | ---------- |
| `PropertyPath.FromName("Path")`              | 1  | 0  |            |
| `PropertyPath.AppendName(previous, "To")`    | 2  | 0  |            |
| `PropertyPath.AppendIndex(previous, 2)`      | 3  | 0  |            |
| `PropertyPath.AppendName(previous, "My")`    | 4  | 0  |            |
| `PropertyPath.AppendName(previous, "Value")` | 5  | 1  | 为附加部分分配数组。 |

要优化性能并避免进行内存分配：

* 在启动程序期间初始化和缓存属性路径。
* 组合或附加属性路径部分（最多四个部分），而不是从字符串构建。

## 其他资源

* [属性包](/engine/6000.0/manual/scripting/object-oriented-development/properties/property-bags.md)
* [属性访问者](/engine/6000.0/manual/scripting/object-oriented-development/properties/property-visitors.md)
* [使用 `PropertyVisitor` 创建属性访问者](/engine/6000.0/manual/scripting/object-oriented-development/properties/property-visitors-propertyvisitor.md)
* [使用低级 API 创建属性访问者](/engine/6000.0/manual/scripting/object-oriented-development/properties/property-visitors-low-level-api.md)
