是否可以更改值类型变量的默认值?

时间:2015-04-23 08:31:20

标签: c#

我只是想知道,是否可以更改默认值,例如:在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。仅出于利益目的。

5 个答案:

答案 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那就是他们做了什么,所以你不能改变。

我认为你必须看http://en.wikipedia.org/wiki/Compiler