c#中的属性未显示正确的结果

时间:2013-11-04 04:59:20

标签: c#

我是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 个答案:

答案 0 :(得分:3)

您需要设置Age而不是_age_age只是一个私人会员,其中Age是您想要设置的属性。

banmeet.Age = 22;

正如Tim Jarvis指出的那样,在年龄设定者中,你需要将年龄设定为_age

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

您可以阅读有关属性与字段here的更多信息。

答案 1 :(得分: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();
        }

答案 2 :(得分:0)

您正在设置_age,这是一个字段,而不是属性。因此,不会调用您的属性设置器。

此外,您不应在属性设置器中设置Age,您应该设置_age。设置Age将导致无限递归(并最终导致堆栈溢出),因为setter正在调用它自己。

答案 3 :(得分: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");
            }
        }
    }