C# - 简单属性用法示例表单教程不起作用

时间:2015-10-21 09:48:41

标签: c# properties

作为C#的初学者,我正在寻找有用的互联网教程。我遇到过这个:http://csharp.net-tutorials.com/。我发现了一个简单的属性使用示例,它会产生意想不到的结果(我正在使用Microsoft Visual Studio 2015)。该示例取自课程http://csharp.net-tutorials.com/classes/properties/和上一课。

using System;
namespace Workshop
{

    class Program
    {
        static void Main(string[] args)
        {
            Car car;

            car = new Car("Red");
            Console.WriteLine(car.Describe());

            car = new Car("Green");
            Console.WriteLine(car.Describe());

            Console.ReadLine();

        }
    }

    class Car
    {
        private string color;

        public Car(string color)
        {
            this.color = color;
        }

        public string Describe()
        {
            return "This car is " + Color;
        }

    public string Color
    {
        get
        {
            return color.ToUpper();
        }
        set
        {
            if (value == "Red")
                color = value;
            else
                Console.WriteLine("This car can only be red!");
        }
    }
}

该计划的结果是:

The car is RED
The car is GREEN

虽然我预计第二行会是:

This car can only be red!

有人可以向我解释为什么这个例子表现得像这样吗? 更一般的问题:有没有人知道这个教程是好的还是我应该寻找不同的东西?

2 个答案:

答案 0 :(得分:2)

该行位于Color属性的set方法中。 在您的代码中,您没有调用Color的set方法。 如果你想要这一行,请编辑你的构造函数:

public Car(string color)
{
   this.Color = color;
}

但是,如果字符串不是“红色”,则不设置color。所以,输出将是:

The car is RED
This car can only be red!

之后,你会得到一个NullReferenceException,因为colorreturn color.ToUpper();为空

答案 1 :(得分:1)

您已在构造函数中设置color(变量),因此未进行验证,因为您已在set{} Color(属性)中放置了验证。 因此,由于您没有设置Color,因此它永远不会触及设置器。