c# - Unity的c#启动静态变量失败
问题描述
我试图在Unity 2017中制作单例。
public class Singleton {
public static readonly Singleton instance = new Singleton();
static readonly float FLOAT_VAL = 3.5f;
static readonly int INT_VAL = 3;
private Singleton() {
Debug.Log("FLOAT_VAL = " + FLOAT_VAL);
Debug.Log("INT_VAL = " + INT_VAL);
}
}
我希望看到"FLOAT_VAL = 3.5"和"INT_VAL = 3"的输出。但是,它的输出为"FLOAT_VAL = 0"和"INT_VAL = 0"。然后我删除了两个“只读”修饰符,留下“静态”,仍然得到两个零。
这个单例的初始化或构造发生了什么?如何正确地将值赋予静态变量?与Unity有什么关系吗?(我在构建项目的时候选择了il2cpp,但是这个是在Editor Mode下测试的)
顺便说一句,我发现变量“instance”的初始化直到第一次调用才开始(我曾经认为所有静态变量都会在加载程序集时初始化。)。它也是 Unity 的另一个功能还是只是正常的?
解决方案
这些字段按照它们被声明的顺序被初始化......所以因为你的实例首先出现,所以你的其他值为零。如果您将它们移到您的实例上方,它们将具有您期望的值
推荐阅读
- javascript - 计算来自选定父级的 AJAX 调用中返回的结果
- azure - 为 Azure DevOps 配置自托管 ARM 代理时出错
- perl - Perl:cpan PDL 安装问题
- r - 如何使用单个数据框使用 2 个 y 轴进行绘图,该数据框具有 7 个具有广泛值的变量?
- c# - DataGridView 不显示 MySQL 表中的数据
- python-3.x - [错误]:使用 Python3 执行多线程脚本时出现 threading.Thread() 问题
- node.js - 使用 Sinon-Chai 测试 Node JS Express 路由中具有多个回调的单个回调被调用
- postgresql - 如果查询有 WHERE 子句,则 Sequelize 原始查询返回空数组
- python-3.x - 替代 sys.exit(1) 用于在填写表单时 url 没有更改时退出测试
- eclipse - 如何在 Eclipse 代码完成时关闭 javadoc