
xlua C#方法中含out ref参数修饰符的注意事项
发布日期:2021-05-15 03:00:57
浏览次数:20
分类:精选文章
本文共 2497 字,大约阅读时间需要 8 分钟。
C#与Lua热更新的参数与返回值对比分析
C#和Lua在函数参数修饰符和返回值处理方面有显著差异,这对于热更新开发来说至关重要。本文将从C#和Lua的具体实现出发,详细分析其参数与返回值的差异性,为开发者提供实用的参考。
C#的参数与返回值机制
在C#中,函数只能返回一个默认值。除了第一个返回值之外,其他返回值需要通过out
或ref
参数修饰符来实现。本文将通过实例说明如何在C#中实现多返回值的获取。
C#函数示例
// 响应一个返回值,其他通过out或ref获取public int TestOut(int a, out double b, ref string c){ b = a + 2; c = "wrong version"; return a + 3;}// 同样方法扩展到多个参数public int TestOut(int a, out double b, ref string c, GameObject go){ return TestOut(a, out b, ref c);}
C#调用示例
double num;string str = "hehe";int ret = calc.TestOut(100, out num, ref str);
Lua热更新函数的参数与返回值机制
Lua在热更新方面提供了更灵活的参数与返回值控制机制。通过对官方示例的分析,我们可以清晰地观察到以下特点。
Lua输入参数修饰
C#中的输入参数与Lua进行对应:
int a
:直接映射out double b
:无需初始值ref string c
:需要初始值GameObject go
:映射额外参数
Lua返回参数修饰
通过官方示例可以看出,Lua的返回值与C#中的out
和ref
修饰符对应:
a + 10
:对应C#的返回值a + 20
:对应C#的out
返回值'right version'
:对应C#的ref
返回值
Lua热更新函数示例
xlua.hotfix(CS.XLuaTest.HotfixCalc, 'TestOut', function(self, a, c, go) print('TestOut', self, a, c, go) if go then error('test error') end return a + 10, a + 20, 'right version'end
更新前后对比
本案例摘自官方Examples 08Hotfix中的HotfixTest2
,具体实现如下:
原本代码
public class HotfixCalc{ public int TestOut(int a, out double b, ref string c) { b = a + 2; c = "wrong version"; return a + 3; } public int TestOut(int a, out double b, ref string c, GameObject go) { return TestOut(a, out b, ref c); }}
热更新后的代码
public class HotfixCalc{ public int TestOut(int a, out double b, ref string c, GameObject go) { b = a + 2; c = "wrong version"; return a + 3; }}
使用示例
public class HotfixTest2 : MonoBehaviour{ void Start() { HotfixCalc calc = new HotfixCalc(); int ret = calc.TestOut(100, out num, ref str); // 热更新前调用 Debug.Log("热更新前:ret = " + ret + ", num = " + num + ", str = " + str); // 热更新后调用 luaenv.DoString(@" xlua.hotfix(CS.XLuaTest.HotfixCalc, 'TestOut', function(self, a, c, go) print('TestOut', self, a, c, go) if go then error('test error') end return a + 10, a + 20, 'right version' end "); str = "hehe"; ret = calc.TestOut(100, out num, ref str); Debug.Log("热更新后:ret = " + ret + ", num = " + num + ", str = " + str); }}
实施后的效果对比
通过实践可以发现,采用Lua的热更新方式能够在不对现有代码进行重大修改的情况下实现功能迭代。这简化了发布流程,同时提高了开发效率。建议在项目初期就引入热更新机制,以便充分发挥其优势。
通过对比分析C#与Lua在参数与返回值处理方面的差异,我希望开发者能够更清晰地理解热更新的实现方式,并根据实际需求选择最合适的技术方案。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月17日 10时12分14秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
影响拉线位移传感器精度的原因有哪些?
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
Horizon Cloud之UAG访问异常
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
vcenter访问报503错误处理
2019-03-12
项目计划甘特图绘制说明
2019-03-12
C/C++:线性表之顺序表
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
图神经网络7日打卡营学习心得
2019-03-12
electronJS 开发linux App
2019-03-12
MbedOS 设备中的模数转换(ADC)
2019-03-12
【vue】setInterval的嵌套实例
2019-03-12
【SpringBoot】如何配置热部署
2019-03-12
【rabbitMQ】04 如何实现高可用?
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
C# 文本框限制大全
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12