2013-07-17 50 views
1

我在想一本关于C#的书中的一句话,我正在阅读。这句话是:“初始化为全0的值类型”是什么意思?

'初始化为全0的值类型'。

大概我不明白,因为我不是母语的人。

在我对语言的理解中,这意味着变量在初始化时有多个值?这对我来说并不合适。你能帮我理解这是什么意思吗?

+1

所有位成为'0' –

回答

1

我觉得这个句子没有正确的表述。 我猜测作者意味着,或者应该已经写出,在声明时,值类型被初始化为其默认值。 在整数(这是一个值类型)的情况下,默认值是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 
+0

这仅适用于域,不是本地人。另外,引用类型也是默认初始化的。 –

+0

这句话是正确的,因为内存中的基础值(在'DateTime'的情况下,自显示值为'c'的日期开始打勾)将为零。用于显示“DateTime”的+1,其中内存值的值确实为0,即使它不代表我们将解释为“零”的值。 –

4

考虑这个值类型:

public struct Point 
{ 
    public int X; 
    public int Y; 
} 

“全0”表示X = 0且Y = 0。

更新:我刚刚发现这个例子用于MSDN documentation for struct。他们抛出一个构造函数。

+1

我觉得这个回应有点不准确。内存中的零不一定意味着*“零”,因为它正好适用于“int”变量。然而,这本书中的句子可能指的是记忆中的零。 –

0

也许它是关于默认值值类型,如bytedoubleintsbyteshortuintushortulong

例如,当你说这个;

int i = new int(); 

i初始化为0.

检查Default Values Table (C# Reference)

此外,它可被使用的值类型在结构类型等;

public struct MyStruct 
{ 
    public int X; 
    public short Y; 
    public double Z; 
} 

XYZ的值是0

0

最有可能的作者意味着默认值值类型实例中存在的每种类型(对于每种类型自然可能不同)。

为了实现这一点可以做到,如:

MyStruct struc = default(MyStruct); 
0

值类型的变量占据一定数量的存储器字节数。该类型被初始化为零的表示意味着在变量初始化时所有这些字节都被设置为值。

对于许多(如果不是全部的话)值类型(即原始数字类型,结构...),如this question中概述的,这似乎是正确的。

0

值类型是非引用类型,如结构或整数。通过说“初始化为全零”意味着如果你没有设置它,它会被自动初始化为零值。

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 
    } 
} 
+0

不要忘记这是'int?(可空)'错误'。我的意思是默认设置为空 –

+0

是的。因为它们是框值类型,所以可以为空的引用类型。 –

+0

@NickGotch:[这个问题的答案](http://stackoverflow.com/questions/3149173/are-nullable-types-reference-types)得出相反的结论。 –