C# “初始化为所有0的值类型”是什么意思?

C# “初始化为所有0的值类型”是什么意思?,c#,initialization,C#,Initialization,我想知道我正在读的一本关于C的书中有一句话。这句话是: '初始化为所有0的值类型' 也许我不明白,因为我不是以英语为母语的人 在我对语言的理解中,这是否意味着一个变量在初始化时有多个值?这对我来说没什么意义。你能帮我理解这是什么意思吗?我认为这个句子的表述不正确。 我猜作者的意思是,或者应该写,一个值类型在声明时被初始化为它的默认值。 对于值类型的整数,默认值为0 比如说 public struct Test { public int a; public Decimal b;

我想知道我正在读的一本关于C的书中有一句话。这句话是:

'初始化为所有0的值类型'

也许我不明白,因为我不是以英语为母语的人


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

我认为这个句子的表述不正确。 我猜作者的意思是,或者应该写,一个值类型在声明时被初始化为它的默认值。 对于值类型的整数,默认值为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。很高兴知道。