【发布时间】:2021-06-04 10:06:50
【问题描述】:
我知道这是一个基本问题,但似乎没有明确的答案。 将数组声明为类字段时,不允许在运行时确定变量大小,
public class MyClass : MonoBehaviour{
int size = 6;
float[] f = new float[size]; //not allowed
// Start is called before the first frame update
void Start()
{
//some code
}
}
虽然以相同的方式声明它,但作为函数内部的局部变量,例如开始非常好:
public class MyClass : MonoBehaviour{
void Start()
{
int size = 6;
float[] f = new float[size];
//some code
}
}
这与变量的范围有关吗?或者内存分配发生在堆栈、堆等的地方? 提前谢谢你
【问题讨论】:
-
我相信当您声明为成员变量时,会引发编译时错误,说明
A field initializer cannot reference the non-static field, method, or property。错误本身说明了编译错误的原因。现在,如果要声明为字段,则将大小定义为const,以便大小值仅在编译时可用...将int size = 6更改为const int size = 6 -
当然你可以改变数组字段的大小如果你在构造函数中初始化它,而不是试图用字段声明本身来初始化它。你需要区分声明和初始化。
-
感谢您的回答。我知道解决方法(使用 List
而不是数组,将其声明为 const 等)。我正在寻找的是关于推理的见解,为什么 C# 会允许它在“开始”函数中。此外,根据另一篇文章,似乎在构造函数中进行内联初始化和初始化似乎对于允许的内容和不允许的内容没有区别stackoverflow.com/questions/24551/… -
类字段在
static上下文中初始化,因为它发生在之前构造函数被调用,所以this还不存在,因此你不能引用任何东西那是基于实例的..只有其他static的东西