使用固定数字
本文关键字:数字 | 更新日期: 2023-09-27 18:30:24
我只是想知道在脚本开始时调用时如何制作一个永不更改的数字?
因此,一旦您从 Awake() 或 Start()
中定义了它,我怎样才能使数字固定下来?即使是函数也无法改变它。
我不想提供一个确定的数字,比如 2 或 5 或 100 甚至 1000000 我想创建一个变量,以便我可以在 Awake()
或 Start()
函数中更改它。并在整个脚本中保持固定。
这可能吗?
简短的回答是你不能用你描述的方式做到这一点,你能做的最接近的事情是使用只读字段和一个构造函数
public class Foo
{
public readonly int myInt;
public Foo()
{
myInt = 1;
}
public void doBad()
{
myInt = 1213; // Not allowed
}
}
如果绝对需要,您可以执行以下操作,但请注意,这是一种可怕的模式,并不能确保它仅在"开始"设置时设置。你不应该这样做!!!!
public class Foo2{
private bool calledOnce = false;
private int _myInt;
public readonly int myInt{
get {return _myInt;}
set {
if (calledOnce){
throw new Exception("Not allowed");
}else{
_myInt = value;
calledOnce = true;
}
}
}
public void start()
{
myInt = 1213;
}
public void doBad()
{
myInt = 1213; // will throw
}
万一大写字母不明显,做第二件事是一个非常糟糕的主意,并且反映了代码中的很多问题,并且很可能是奇怪错误的根源,但是一旦进入蓝月亮,就需要一些可怕的奇怪代码来处理一个非常奇怪的问题, 但我猜这不是其中一种情况。最好重新思考整个问题,更好地了解真正的需求是什么。
如果你想
在Awake()
或Start()
中设置它,那么按照这个逻辑,你想要的是一个常量变量。由于您无法将参数传递给这两个函数,因此根据该逻辑,变量应该是常量,并且在编译时已知其值。
const int WHAT_WANT = 11011;
此外,当类是MonoBehaviour
时,使用构造函数也不安全。因此,readonly
是一个糟糕的主意。
(ps Awake and Start 暗示 OP 正在使用 MonoBehavior)