【发布时间】:2013-07-16 04:39:45
【问题描述】:
我想知道我目前正在阅读的一本关于 C# 的书中的一句话。这句话是:
'初始化为全0'的值类型。
可能我不明白,因为我不是母语人士。
在我对语言的理解中,这是否意味着变量在初始化时具有多个值?这对我来说真的没有意义。你能帮我理解这是什么意思吗?
【问题讨论】:
标签: c# initialization
我想知道我目前正在阅读的一本关于 C# 的书中的一句话。这句话是:
'初始化为全0'的值类型。
可能我不明白,因为我不是母语人士。
在我对语言的理解中,这是否意味着变量在初始化时具有多个值?这对我来说真的没有意义。你能帮我理解这是什么意思吗?
【问题讨论】:
标签: c# initialization
我认为句子的表述不正确。 我猜作者的意思是,或者应该写,一个值类型在声明时被初始化为其默认值。 如果是整数(值类型),则默认值为 0。
例如
public struct Test
{
public int a;
public Decimal b;
public DateTime c;
public void Output(){
Console.WriteLine ("a: " + a);
Console.WriteLine ("b: " + b);
Console.WriteLine ("c: " + c);
}
}
var t = new Test();
t.Output();
将显示:
a: 0
b: 0
c: 01/01/0001 0:00:00
【讨论】:
DateTime 的情况下,自显示为值c 的日期以来的滴答声)将为零。 +1 用于将 DateTime 显示为内存值确实为 0 的示例,即使它不表示我们将解释为“零”的值。
考虑这个值类型:
public struct Point
{
public int X;
public int Y;
}
这里的“全 0”表示 X = 0 和 Y = 0。
更新:我刚刚发现这个例子用在MSDN documentation for struct中。他们抛出了一个构造函数。
【讨论】:
int 变量一样。然而,书中的句子可能指的是记忆中的零。
可能是关于值类型的默认值,例如byte、double、int、sbyte、short、uint、ushort、@987654329 @。
例如当你这样说的时候;
int i = new int();
i初始化为0.
查看Default Values Table (C# Reference)
它也可以在结构类型中使用值类型,例如;
public struct MyStruct
{
public int X;
public short Y;
public double Z;
}
X、Y 和Z 的值为0。
【讨论】:
最有可能作者的意思是值类型实例中存在的每种类型的 默认 值(每种类型自然可能不同)。
要做到这一点,你可以这样做:
MyStruct struc = default(MyStruct);
【讨论】:
值类型的变量在内存中占用一定数量的字节。该类型初始化为零的声明意味着所有这些字节在变量初始化时都设置为值0。
正如this question 中所述,这似乎适用于许多(如果不是全部)值类型(即原始数字类型、结构等)。
【讨论】:
值类型是非引用类型,例如结构或整数。通过说它“初始化为全零”,这意味着如果您不将其设置为某个值,它将自动初始化为零值。
public class Foo
{
public int _foo;
public int? _bar;
public void Output()
{
Console.WriteLine(this._foo); // Outputs: 0
Console.WriteLine(this._bar.HasValue ? "not null" : "null"); // Outputs: null
}
}
【讨论】:
int?(Nullable<T>) 是错误的。我的意思是哪个默认为 null
HasValue,将其设置为 null 只会使该布尔值变为 false。它实际上是一个Struct 编译器假装显示为null。