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

标签 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

附言仅供引用。

最佳答案

不,基本上。假设您不初始化字段,则内存空间只是清零。您不应该直接公开字段无论如何

我见过的一个解决这个问题的技巧(由 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; }) 可能更简单。

关于c# - 是否可以更改值类型变量的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29817854/

相关文章:

c# - TFS 2010 API 文档

c# - 为什么我对 Kairos api 的 REST 请求说请求缺少必需的参数?

c# - 在 .net mvc 和 angular 中生成 csrf token 时遇到问题

c# - 带有 UoW 更新的 EF 存储库

c# - .net Async 和 google go 轻量级线程之间的主要区别是什么

c# - .gitignore 和 Visual Studio 项目 : Ignore bin/Debug directory but not bin/Release directory

C# AutoMapper,如何映射组数

c# - 如何获取任何文件/文件夹的系统图标

c# - Selenium `wait.until` 不等到提供的路径在 DOM 上呈现

c# - 如果元素个数是变量,如何显示数组元素