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.

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

那么如果使用上面的代码输出是Value to Small因为 _age 是 0。

为了得到正确的结果,你应该使用这个:

   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

封装被定义为“将一个或多个项目封装在一个物理或逻辑包中的过程”。在面向对象的编程方法中,封装阻止了对实现细节的访问。最好设置值_age而不是 Age 。

    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 回答