跳到主要内容

编组模型概览

:::tip 谁该读本文 需要理解参数如何在 C# 与 Lua 间转换、何时用 new_ref / [LuaMarshalAs] 的开发者。 查表用 编组速查表ref/out 实操见 指南。 :::

ZLua 在 Mono 与 Il2Cpp 上 Lua 可见编组语义一致;Il2Cpp 侧重零 GC 与生成代码快速路径。

双向调用路径

默认规则摘要

类别C# → LuaLua → C#
基元 / enuminteger / number / boolean同左
stringstringstring
classClassUserDatauserdata / nil
structOpaqueValue (lightuserdata)StructUserData / table
delegateDelegateUserDatafunction 或 userdata
arrayArrayUserDataArrayUserData

完整表格:编组速查表

ref / out / in(Lua → C#)

Lua 侧 不区分 ref/out/in,统一按 ref 语义处理:

Lua 实参行为
zlua.new_ref(T) / struct userdata真 ref,C# 修改写回
裸 number / string / table拷贝到临时槽,不写回 local

[LuaInvoke] 与 delegate bridge 不支持 ref/out 形参。

[LuaMarshalAs] 覆盖

LuaMarshalType典型用途
UserData强制 boxed userdata(基元、enum、string)
Bytesbyte[] ↔ Lua string
OpaqueLightUserDataC#→Lua 栈上 struct 临时句柄 → zlua.to_user_data

合法组合见 LuaMarshalAs 参考

分册索引(何时读哪本)

类型规范
总览与 §1 默认表编组规范
class / 引用 / 数组Class 编组
struct / enum userdataStruct 编组
Delegate / 回调Function 编组

相关文档