【发布时间】:2018-04-29 10:39:21
【问题描述】:
我试图在 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 的另一个功能还是只是普通功能?
【问题讨论】:
-
正常。这就是 .Net 的工作原理。
-
你所说的“正常”是什么意思?延迟启动?还是意外的值?
-
欢迎来到 SO。您不必修改您的问题并说它已解决。当您接受答案时,人们会知道它已解决,而您在这种情况下也这样做了。
-
直到第一个引用是正常的 C# 事情之前,静态不会初始化。就个人而言,我对单例使用惰性加载器模式。