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

        }
    }

コンソールは以下を返します:

ここに画像の説明を入力してください

が0に設定されている場合payPerViewDiscount、これは確かに発生する可能性がありますが、Discountプロパティが呼び出された場合、変数iGotChangedは1または2を返すはずですが、0のままであるように見えます。タイプは0intのデフォルト値がありますか?payPerViewDiscount

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 に答える