Files
XCEngine/docs/api/XCEngine/Scripting/Mono/MonoScriptRuntime/TryGetClassFieldDefaultValues.md

1.3 KiB

MonoScriptRuntime::TryGetClassFieldDefaultValues

命名空间: XCEngine::Scripting

类型: method

头文件: XCEngine/Scripting/Mono/MonoScriptRuntime.h

签名

bool TryGetClassFieldDefaultValues(
    const std::string& assemblyName,
    const std::string& namespaceName,
    const std::string& className,
    std::vector<ScriptFieldDefaultValue>& outFields) const override;

当前实现流程

  1. 清空 outFields
  2. (assemblyName, namespaceName, className) 查找缓存的类元数据。
  3. 切换到当前 app domain。
  4. 创建一个临时托管对象并执行默认构造。
  5. 遍历缓存字段,逐个读取字段值并写入 ScriptFieldDefaultValue
  6. fieldName 排序后返回。

为什么它重要

这里返回的是托管类真实初始化后的字段值,所以它能反映:

  • C# 字段初始化表达式
  • 默认构造后留下的初始状态

ScriptEngine::TryGetScriptFieldModel()ClearScriptFieldOverrides() 都依赖这条数据。

失败路径

  • 类找不到
  • Mono 无法创建临时对象
  • 任意字段读取失败

这些情况都会返回 false,并清空输出。

相关文档