作为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!
有人可以向我解释为什么这个例子表现得像这样吗? 更一般的问题:有没有人知道这个教程是好的还是我应该寻找不同的东西?
答案 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,因为color
中return color.ToUpper();
为空
答案 1 :(得分:1)
您已在构造函数中设置color
(变量),因此未进行验证,因为您已在set{}
Color
(属性)中放置了验证。
因此,由于您没有设置Color
,因此它永远不会触及设置器。