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!
谁能给我解释一下为什么这个例子是这样的?还有一个更普遍的问题:有没有人知道这个教程是一个好教程,还是我应该寻找其他不同的教程?
本行在Color
属性的set方法中。在您的代码中,您没有调用Color的set方法。如果需要这一行,请编辑构造函数:
public Car(string color)
{
this.Color = color;
}
但是,当字符串不是"Red"时,不设置color
。因此,输出将是:
The car is RED
This car can only be red!
之后,你会得到一个NullReferenceException,因为color
在return color.ToUpper();
您在构造函数中设置了color
(变量),因此没有发生验证,因为您在Color
(属性)的set{}
中放置了验证。因为你没有设置Color
,所以它永远不会到达setter