3

我有一个带有以下代码的控制台应用程序:

    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;
            }

        }
    }

控制台返回以下内容:

在此处输入图像描述

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

4

4 回答 4

10

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

int t = default(int);

t将举行0

于 2012-09-06T07:46:35.547 回答
3

在构造函数运行之前,类中的字段被初始化为其默认值。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'"
    }
}
于 2012-09-06T07:48:09.863 回答
2

确切地。int默认值为0.

于 2012-09-06T07:46:35.753 回答
2

是的,零是 int 的默认值。

于 2012-09-06T07:47:10.583 回答