0

私はC#の初心者です。私はプロパティについて読んでいました。私はこれをコーディングしましたが、結果は「Value to big」と表示されるべきだと思いますが、何も表示されません。どこが間違っているのか教えてください。ありがとう。

       private int _age;

        public int Age
        {
            get { return _age; }
            set
            {
                if (value < 10)
                {
                    Age = value;
                    Console.WriteLine("Value to Small");
                }
                else
                {
                    Console.WriteLine("Value to Big");
                }
            }
        }

        private static void Main(string[] args)
        {
            var banmeet = new Program();
            banmeet._age = 22;
            Console.ReadLine();
        }
    }
}
4

4 に答える 4

3

Ageの代わりに設定する必要があり_ageます。_ageは単にプライベート メンバーであり、Age設定するプロパティも同様です。

banmeet.Age = 22;

また、Tim Jarvis が指摘したように、 age setter 内で、 age を に設定する必要があります_age

if (value < 10)
{
    _age = value;
    Console.WriteLine("Value to Small");
}

プロパティとフィールドの詳細については、こちらをご覧ください。

于 2013-11-04T05:02:29.100 に答える
1

いくつかの間違いがあります。まず、次のコードを使用します。

    private int _age;

    public int Age
    {
        get { return _age; }
        set
        {
            if (_age < 10)
            {
                _age = value;
                Console.WriteLine("Value to Small");
            }
            else
            {
                Console.WriteLine("Value to Big");
            }
        }
    }

    private static void Main(string[] args)
    {
        var banmeet = new Program();
        banmeet.Age = 22;
        Console.ReadLine();
    }

上記のコードを使用すると、_age が 0 であるため、Value to Smallが出力されます。

正しい結果を得るには、これを使用する必要があります。

   private int _age;

        public int Age
        {
            get { return _age; }
            set
            {
                _age = value;

                Console.WriteLine(_age < 10 ? "Value to Small" : "Value to Big");
            }
        }

        private static void Main(string[] args)
        {
            var banmeet = new Program();
            banmeet.Age = 22;
            Console.ReadLine();
        }
于 2013-11-04T05:06:00.167 に答える
0

カプセル化は、「物理的または論理的なパッケージ内に 1 つまたは複数のアイテムを封入するプロセス」と定義されています。オブジェクト指向プログラミング方法論におけるカプセル化は、実装の詳細へのアクセスを防ぎます。_ageAge の代わりに値を設定することをお勧めします。

    public int Age
    {
        get { return _age; }
        set
        {
            if (value < 10)
            {
                _age = value;
                Console.WriteLine("Value to Small");
            }
            else
            {
                Console.WriteLine("Value to Big");
            }
        }
    }
于 2013-11-04T05:06:34.077 に答える
0

プロパティではなくフィールドである _age を設定しています。したがって、プロパティ セッターは呼び出されません。

また、プロパティ セッターで Age を設定しないでください。_age を設定する必要があります。Age を設定すると、setter がそれ自体を呼び出しているため、無限再帰 (そして最終的にはスタック オーバーフロー) が発生します。

于 2013-11-04T05:04:33.510 に答える