我想输出tiger1实例的numberOfLegs
。但是输出是0而不是我预期的4.我的错误在哪里?请帮助老虎让他的腿恢复。
using System;
namespace AbstractProperty
{
class MainClass
{
static void Main(string[] args)
{
Tiger tiger1 = new Tiger();
int result = tiger1.NumberOfLegs;
Console.WriteLine(result);
Console.Read();
}
public abstract class Animal
{
public abstract int NumberOfLegs { get; set; }
}
public class Tiger : Animal
{
private int numberOfLegs;
public override int NumberOfLegs
{
get
{
return numberOfLegs;
}
set
{
numberOfLegs = 4;
}
}
}
}
}
编辑:我认为在Setter
中使用numberOfLegs = 4
并不好
答案 0 :(得分:1)
未调用NumberOfLegs属性设置器,因为您未在代码中的任何位置更改值。 int值默认为零。您可以执行以下操作之一:
numberOfLegs
变量的默认值:private int numberOfLegs = 4;
numberOfLegs
值:public class Tiger : Animal { private int numberOfLegs; public Tiger() { numberOfLegs = 4; } // ... }
答案 1 :(得分:1)
你做错了......
不要为numberOfLegs
提供制定者。只需提供一个吸气剂。然后在构造函数中设置leg的数量,或者直接设置字段,如下所示:
public abstract class Animal
{
public abstract int NumberOfLegs { get; }
}
public class Tiger : Animal
{
private int numberOfLegs = 4;
public override int NumberOfLegs
{
get
{
return numberOfLegs;
}
}
}
您的代码无法正常工作的原因是因为您没有调用Tiger.NumberOfLegs
的设置者,但当然如果您这样做,您就会意识到它有多么错误:< / p>
Tiger tiger1 = new Tiger();
tiger1.NumberOfLegs = 100;
int result = tiger1.NumberOfLegs; // Set to 100, but now it's 4! Urk.
答案 2 :(得分:1)
如我所见,永远不会调用set
的{{1}}访问者,因此NumberOfLegs
的默认值为0。
您可以编写一个构造函数并为numberOfLegs
分配一些值,因为您在NumberOfLegs
访问器中使用了硬编码4,因此将分配4,即如果您按照以下方式编写构造函数:
set
将调用public Tiger() {
NumberOfLegs = 10;
}
访问者并将set
(不是4
)分配给10
。也许你在这里混淆了一些概念:)
编辑1:如果您现在明白在设置器中分配硬编码值并不是那么好,并且您不想在设置器中执行任何特殊操作,那么更好地使用传统的属性方法:
numberOfLegs
或者只是
private int numberOfLegs;
public override int NumberOfLegs
{
get
{
return numberOfLegs;
}
set
{
numberOfLegs = value;
}
}
与上述相同。
并在构造函数中为public override int NumberOfLegs { get; set; }
赋值:
NumberOfLegs