我只是想知道,是否可以更改默认值,例如:在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
P.S。仅出于利益目的。
答案 0 :(得分:3)
您无法更改 int 的默认值,但您可以设置 Foo 的变量默认值:
public class Foo
{
public int i;
public Foo()
{
i = -1;
}
}
答案 1 :(得分:3)
据我所知,您无法更改值类型的默认值。 但你可以把它初始化为你想要的值。
例如。
public class Foo {
public int i = -1;
}
...
foo = new Foo();
Console.Write(foo.i);
它会返回
-1
答案 2 :(得分:3)
不,基本上。假设您没有初始化字段,则内存空间只是归零。您不应该直接直接公开字段。
我已经看到一个解决这个问题的方法(由capnp序列化程序使用,它对原始内存而不是对象使用)是使用xor。例如:如果默认值为-1,则可以输入和输出值:
public class Foo {
private int i;
public int I {
get { return i ^ -1; }
set { i = value ^ -1; }
}
}
这没有初始化,并且做你想要的。对于bools和整数以外的类型使用,这更复杂,但仍然可行 - 但使用初始化器会更容易。
请注意,对于-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; }
)可能更简单。
答案 3 :(得分:0)
一个不错的解决方案是覆盖default(T)
,但不能覆盖此关键字。对于引用类型,它始终为null,对于值类型,它始终为零。
答案 4 :(得分:-1)
你不能改变价值,因为编译器设置默认值所以如果整数类型没有值编译器设置-1那就是他们做了什么,所以你不能改变。