位置: 编程技术 - 正文

Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案(c#使用mongodb)

编辑:rootadmin

推荐整理分享Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案(c#使用mongodb),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:c# 闭包内使用循环,c#封包,c# monitor wait 博客园,c#mongodb,c# monitor wait 博客园,c# 闭包内使用循环,c# 闭包内使用循环,c# 闭包内使用循环,内容如对您有帮助,希望把文章链接给更多的朋友!

转自 异步函数中 ,对界面上的 9 个按钮进行 onClick 设置匿名函数,函数使用Log 打印出当前的Button 的 Index 。代码看起来没有问题,但是测试发现

点击所有按钮 都输出了 8 ,也就是说,虽然我在代码中重新创建了一个 int &#;并赋&#;index的&#;,但是实际上却根本没有生效。

如下:转自 8 。

转自 a 在C#中变成了成员变量不成 ,于是切换到同步代码测试。

测试发现同步代码一切都正常,每个按钮都输出了正确的 index。

转自 来修改替换。

于是先使用Delegate 来替换匿名函数解决这个bug。

首先添加一个类 EventTriggerListener ,用来监听Unity 中的 点击事件,然后回调。

然后代码修改如下:

测试结果转自 的实现不一致导致,可以去查看 反编译出来的 IL 代码。

然后我就去看了 反编译出来的 IL代码。

反编译的流程如上篇文章所讲:

Unity3d 反编译破解游戏 简单示例 (使用ildasm反编译DLL修改然后重新编译DLL)

转自 C# 中的闭包

知识点先行:

对于匿名函数中的变量,C#在编译成 IL 代码的时候,会为这些变量创建一个类。

如下图

Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案(c#使用mongodb)

转自 a 会创建出一个类 <TestSync>c_AnonStorey2

异步中的a ,嗯?没有为a 创建类,但是为 迭代器创建了一个类 '<TestAsync>c__Iterator1

首先来看看同步代码反编译出来的 IL 代码:

大意就是,对 index 与 9进行对比,如果小于9就跳转到开头继续 for循环,每次循环都会 实例化一个 <TestSync>c_AnonStorey2 (int a = index),所以在同步代码中,a是正确的&#;。

转自 IL文件如下:

TestAsync:class[mscorlib]System.Collections.IEnumerator()

看到函数中实例化了 为 迭代器创建了一个类 '<TestAsync>c__Iterator1

然后'<TestAsync>c__Iterator1的结构如下

主要查看 MoveNext:bool() 的代码

转自 其实是生成的这个类的成员变量,MoveNext中一直在对 a 进行重新赋&#;,而没有多次创建 a ,所以 a 的&#;是多次被修改最后修改为 8 。

转自 ildasm使用及IL 语法介绍

关于更多IL 语法命令查询

示例工程下载:

转自

版权声明:本文为博主原创文章,未经博主允许不得转载。

【Unity3d】注意C#的字符串拼接效率问题 现在项目中用的Log输出机制,都是使用StringBuilder进行字符串拼接的,那么为什么要使用StringBuilder进行字符串拼接呢?一开始是这样的:privatestringcontent;publicvo

【Unity3d】如何在Unity中动态载入Lightmapping 用Lightmapping的好处就不用多说了(渲染速度快又出效果),下面是解决方案一.首先,美术将A.Prefab放到场景中打光,渲出Lightmapping,假设生成的的是A_Lightmapping.ex

[置顶] LZMA C# SDK 子线程压缩与解压缩 Unity3d实例 参考雨松的LZMASDK使用方法:

标签: c#使用mongodb

本文链接地址:https://www.jiuchutong.com/biancheng/368416.html 转载请保留说明!

上一篇:以游戏实例介绍Unity3d(如何写出一篇游戏活动案例)

下一篇:【Unity3d】注意C#的字符串拼接效率问题(c#在unity的作用)

  • 偷税行为五年后被发现要接受行政处罚吗?
  • 事业单位补提折旧怎么处理
  • 用房租入股
  • 财政补贴交不交印花税
  • 房地产简易征收可以开专用发票吗
  • 季度所得税申报表营业收入怎么填
  • 银行打出的明细清单怎么看不懂
  • 增值税专用发票税额怎么抵扣
  • 商业汇票如何申领
  • 企业所得税业务费扣除标准
  • 固定资产不动产抵扣新政策
  • 审计人员用餐费用
  • 发票勾选没有确认怎么办
  • 管理会计的目标包括多选题
  • 一般纳税人没有开票要交税吗
  • 预估入账的收入是什么
  • 纳税人所在地为
  • 小规模不动产销售不动产怎么交税
  • 怎么查询发票是否已认证
  • 教育培训行业怎么办
  • 现金预算在企业财务管理中是何地位
  • 甲供材料如何纳税
  • 银行交纳进口关税政策
  • 鸿蒙3.0系统哪些手机可以升级
  • 工程筹建期间发票怎么开
  • 增发股票会计科目
  • 装修公司开专票要交几个点
  • 薪酬总额包干什么意思
  • 简要说明php web的工作流程
  • 数字证书费用计入管理费用什么科目
  • php到底是什么
  • 测网速移动的方法是什么
  • PHP:spl_autoload_call()的用法_spl函数
  • php的file函数
  • 工业企业应付账款周转率多少合适
  • 想做酒水批发的生意怎么做?
  • 资本公积金为什么不能用于弥补亏损
  • 损益类科目怎么结转
  • 同一控制下企业合并发生的审计费用计入
  • php如何删除数组元素
  • 企业所得税合理方法包括
  • 文化事业建设费的征收标准
  • 研发支出资本化支出在资产负债表哪里体现
  • 删除命令rm rf
  • 融资租赁初始直接费用计入哪个科目
  • 新旧所得税法转换规定
  • 增值税出口税
  • python如何获取列表元素
  • 织梦前台的菜单怎么换
  • 通过MySQL日志实时查看执行语句以及更新日志的教程
  • 国际货运代理可以分哪几类?
  • 债权投资产生的暂时性差异确认所得税吗
  • 发放工资的转账支票收款人
  • 物业广告怎么收费
  • 去年亏损今年盈利能分红吗
  • 免抵退 免退
  • 年底员工借款如何处理
  • mysql在本地主机创建用户账号
  • WinXP系统VPN连接经常性自动断开的4个解决方法
  • Win10 Mobile 10572快速配置更新推送 Win10 Mobile 10572升级体验
  • ubuntu安装chia
  • svaplayer.exe - svaplayer是什么进程 有何作用
  • Linux中QQ软件的安装和配置
  • win7安装软件后所有打开变成记事本
  • xshell远程桌面
  • win7 windows安全
  • Windows8和Windows8 RT版的区别介绍
  • perl use of uninitialized
  • stick function
  • My Magic Android Tour —— 处女作
  • unity 3d脚本编程
  • 安卓手机怎么导入地图
  • 安全的代码
  • 深入理解ffmpeg pdf
  • javascript的主要内容
  • javascript常见问题
  • jquery的validate前端表单验证
  • The method findViewById(int) is undefined for the type FragmentHome报错
  • 陕西税务局稽查处处长
  • 财政法和经济法的关系
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设