C# int字段的默认值是否为0?

C# int字段的默认值是否为0?,c#,console-application,C#,Console Application,我有一个控制台应用程序,代码如下: using System; namespace HeadfirstPage210bill { class Program { static void Main(string[] args) { CableBill myBill = new CableBill(4); Console.Write

我有一个控制台应用程序,代码如下:

    using System;

    namespace HeadfirstPage210bill
    {
        class Program
        {
            static void Main(string[] args)
            {
                CableBill myBill = new CableBill(4);
                Console.WriteLine(myBill.iGotChanged);
                Console.WriteLine(myBill.CalculateAmount(7).ToString("£##,#0.00"));
                Console.WriteLine("Press enter to exit");
                Console.WriteLine(myBill.iGotChanged);
                Console.Read();
            }
        }
    }
CableBill.cs类如下所示:

    using System;

    namespace HeadfirstPage210bill
    {
        class CableBill
        {
            private int rentalFee;
            public CableBill(int rentalFee) {
                iGotChanged = 0;
                this.rentalFee = rentalFee;
                discount = false;
            }

            public int iGotChanged = 0;


            private int payPerViewDiscount;
            private bool discount;
            public bool Discount {
                set {
                    discount = value;
                    if (discount) {
                        payPerViewDiscount = 2;
                        iGotChanged = 1;
                    } else {
                        payPerViewDiscount = 0;
                        iGotChanged = 2;
                    }
                }
            }

            public int CalculateAmount(int payPerViewMoviesOrdered) {
                return (rentalFee - payPerViewDiscount) * payPerViewMoviesOrdered;
            }

        }
    }
控制台正在返回以下内容:

    using System;

    namespace HeadfirstPage210bill
    {
        class CableBill
        {
            private int rentalFee;
            public CableBill(int rentalFee) {
                iGotChanged = 0;
                this.rentalFee = rentalFee;
                discount = false;
            }

            public int iGotChanged = 0;


            private int payPerViewDiscount;
            private bool discount;
            public bool Discount {
                set {
                    discount = value;
                    if (discount) {
                        payPerViewDiscount = 2;
                        iGotChanged = 1;
                    } else {
                        payPerViewDiscount = 0;
                        iGotChanged = 2;
                    }
                }
            }

            public int CalculateAmount(int payPerViewMoviesOrdered) {
                return (rentalFee - payPerViewDiscount) * payPerViewMoviesOrdered;
            }

        }
    }


我看不到的是
payPerViewDiscount
设置为0时的情况。当然,这只能在设置了折扣属性时发生,但是如果调用属性折扣,那么变量
iGotChanged
应该返回1或2,但它似乎保持在0。因为它是类型
int
payPerViewDiscount
是否有默认值0

是int的默认值是
0
您可以使用关键字进行检查


t
将准确地保持
0

int
默认值为
0
是,零是int的默认值。

类中的字段在构造函数运行之前初始化为其默认值。int的默认值为0

请注意,这不适用于局部变量,例如在方法中。它们不会自动初始化

public class X
{
    private int _field;

    public void PrintField()
    {
        Console.WriteLine(_field); // prints 0
    }

    public void PrintLocal()
    {
        int local;
        Console.WriteLine(local); 
        // yields compiler error "Use of unassigned local variable 'local'"
    }
}

+1谢谢-我想可能是这样,但它似乎有点违背了语言类型安全严格性的强大类型安全基础?怎么会呢?我并没有正确地表达它…这似乎是一个非常严格的语言,但这个默认值似乎与严格相反。。。我说得有道理吗?默认值是指定相同类型的默认值,所以我认为这很好,通常在指定值之前不能使用它,因为它是类中的一个字段,它将被分配
默认值
值感谢对局部变量的额外注意-我怀疑我可能会在将来对此挠头