我只是想知道,是否可以更改默认值,例如C# 中的 int,我可以有一个值 -1 而不是 0。
public class Foo {
public int i;
}
...
foo = new Foo();
Console.Write(foo.i);
所以这段代码必须返回
-1
没有显式初始化
public class Foo {
public int i = -1;
}
我能否始终确定,有人不会在某处打印类似的东西
#define TRUE FALSE
但对于默认值 int
附言仅供引用。
不,基本上。假设您不初始化字段,则内存空间只是清零。您不应该直接公开字段无论如何。
我见过的一个解决这个问题的技巧(由 capnp 序列化程序使用,它针对原始内存而不是对象)是使用 xor。例如:如果默认是-1,你可以对输入和输出的值进行异或操作:
public class Foo {
private int i;
public int I {
get { return i ^ -1; }
set { i = value ^ -1; }
}
}
这没有初始化,并且做你想做的。对于 bool 和整数以外的类型,这更复杂,但仍然可能 - 但使用初始化程序会更容易。
请注意,对于 -1
的情况,您可以使用“not”而不是“xor”:
public class Foo {
private int i;
public int I {
get { return ~i; }
set { i = ~value; }
}
}
但是:字段初始值设定项 (int i = -1;
) 或构造函数 (public Foo() { i = -1; }
) 可能更简单。