c# -简单的属性使用示例教程不起作用

本文关键字:教程 不起作用 简单 属性 | 更新日期: 2023-09-27 18:18:42

作为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!

谁能给我解释一下为什么这个例子是这样的?还有一个更普遍的问题:有没有人知道这个教程是一个好教程,还是我应该寻找其他不同的教程?

c# -简单的属性使用示例教程不起作用

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

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

但是,当字符串不是"Red"时,不设置color。因此,输出将是:

The car is RED
This car can only be red!

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

中为空

您在构造函数中设置了color(变量),因此没有发生验证,因为您在Color(属性)的set{}中放置了验证。因为你没有设置Color,所以它永远不会到达setter