我是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();
}
}
}
答案 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");
}
}
}