C# “初始化为所有0的值类型”是什么意思?
我想知道我正在读的一本关于C的书中有一句话。这句话是: '初始化为所有0的值类型' 也许我不明白,因为我不是以英语为母语的人C# “初始化为所有0的值类型”是什么意思?,c#,initialization,C#,Initialization,我想知道我正在读的一本关于C的书中有一句话。这句话是: '初始化为所有0的值类型' 也许我不明白,因为我不是以英语为母语的人 在我对语言的理解中,这是否意味着一个变量在初始化时有多个值?这对我来说没什么意义。你能帮我理解这是什么意思吗?我认为这个句子的表述不正确。 我猜作者的意思是,或者应该写,一个值类型在声明时被初始化为它的默认值。 对于值类型的整数,默认值为0 比如说 public struct Test { public int a; public Decimal b;
在我对语言的理解中,这是否意味着一个变量在初始化时有多个值?这对我来说没什么意义。你能帮我理解这是什么意思吗?我认为这个句子的表述不正确。 我猜作者的意思是,或者应该写,一个值类型在声明时被初始化为它的默认值。 对于值类型的整数,默认值为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 比如说
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
考虑以下值类型:
public struct Point
{
public int X;
public int Y;
}
这里所有的0表示X=0,Y=0
更新:我刚刚发现这个示例在中使用。它们包含一个构造函数。考虑以下值类型:
public struct Point
{
public int X;
public int Y;
}
这里所有的0表示X=0,Y=0
更新:我刚刚发现这个示例在中使用。它们包含一个构造函数。可能是关于诸如byte、double、int、sbyte、short、uint、ushort、ulong等值类型的默认值
比如你说这个,
int i = new int();
我初始化为0
检查
它还可以在结构类型中使用值类型,如
public struct MyStruct
{
public int X;
public short Y;
public double Z;
}
X、Y和Z的值为0。可能是关于诸如byte、double、int、sbyte、short、uint、ushort、ulong等值类型的默认值
比如你说这个,
int i = new int();
我初始化为0
检查
它还可以在结构类型中使用值类型,如
public struct MyStruct
{
public int X;
public short Y;
public double Z;
}
X、Y和Z的值为0。作者很可能表示值类型实例中存在的每种类型的默认值,这对于每种类型来说都是不同的 要实现这一点,您可以执行以下操作:
MyStruct struc = default(MyStruct);
大多数情况下,author表示值类型实例中存在的每种类型的默认值,这对于每种类型来说都是不同的 要实现这一点,您可以执行以下操作:
MyStruct struc = default(MyStruct);
值类型的变量在内存中占用一定数量的字节。该类型被初始化为零的语句意味着在初始化变量时,所有这些字节都被设置为值0
这似乎适用于许多(如果不是全部的话)值类型,即原语数字类型、结构等,如中所述。值类型的变量在内存中占用一定数量的字节。该类型被初始化为零的语句意味着在初始化变量时,所有这些字节都被设置为值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
}
}
值类型是非引用类型,例如结构或整数。通过说它初始化为全零,这意味着如果你不将它设置为某个值,它将自动初始化为零值
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
}
}
这只适用于字段,而不适用于局部变量。此外,引用类型也是默认初始化的。句子是正确的,因为在DateTime的情况下,内存中的基础值是滴答声,因为显示为值c的日期是零+1,以显示DateTime为例,其中内存值实际上为0,即使它不表示我们将解释为零的值。这仅适用于字段,而不适用于局部变量。此外,引用类型也是默认初始化的。句子是正确的,因为在DateTime的情况下,内存中的基础值是滴答声,因为显示为值c的日期是零+1以DateTime为例,其中内存值实际上为0,即使它不表示我们将解释为零的值。我认为这个响应有点不精确。内存中的零并不一定意味着零,就像int变量一样。然而,书中的这句话可能指的是记忆中的零。我认为这个回答有点不准确。内存中的零并不一定意味着零,就像int变量一样。然而,书中的句子可能是指内存中的零。别忘了这对于int?Nullable是错误的。我的意思是将null作为defaultYes。Nullables是引用类型,因为它们是框值类型。啊,很有趣。有道理。@NickGotch你的假设是错误的。它实际上是一个结构。其中有一个布尔值HasValue,将其设置为null只会使
布尔值为false。它实际上是一个结构编译器假装显示为null。因此,Nullable将默认为零的原因是,如果所有内容都初始化为零,HasValue将默认为false,并使其充当null。很高兴知道。别忘了这对于int?Nullable是假的。我的意思是将null作为defaultYes。Nullables是引用类型,因为它们是框值类型。啊,很有趣。有道理。@NickGotch你的假设是错误的。它实际上是一个结构。其中有一个布尔值HasValue,将其设置为null只会使该布尔值为false。它实际上是一个结构编译器假装显示为null。因此,Nullable将默认为零的原因是,如果所有内容都初始化为零,HasValue将默认为false,并使其充当null。很高兴知道。