我有一个名为Animal
的班级。对于任何给定的动物a
,a.number_of_legs
应为4。
我有一个名为Human
的类,它继承自Animal
。对于任何给定的人h
,h.number_of_legs
应为2。
如何设置number_of_legs
属性?
这是我到目前为止所拥有的:
class Animal {
int number_of_legs = 4;
}
class Human : Animal {
int number_of_legs = 2;
}
但是,如果我采取一些任意的动物,并询问它有多少腿,答案总是2:
Animal x = new Animal();
Animal y = new Human();
x.number_of_legs // --> 4
y.number_of_legs // --> 4
我了解这个新Human
被视为Animal
,因为变量y
存储了Animal
。
如何设置number_of_legs
属性,以便x.number_of_legs
为4且y.number_of_legs
为2?
答案 0 :(得分:5)
首先,您应该使用实际的C#properties来获取此类可公开访问的值,而不是公共字段。
在基类中标记属性virtual
,以便可以在派生类中重写它。
public class Animal {
// By default, Animals will have 4 legs.
public virtual int NumberOfLegs { get { return 4; } }
}
然后override
在派生类中提供不同的实现。
public class Human : Animal {
// But humans have 2 legs.
public override int NumberOfLegs { get { return 2; } }
}
答案 1 :(得分:1)
试试这个......
namespace StackOverflow
{
public class Animal
{
public int Legs { get; set; }
public Animal() { Legs = 4; }
public Animal(int legs) { Legs = legs; }
}
public class Human : Animal
{
public Human() : base(2) { }
}
}
答案 2 :(得分:0)
Joe,您也可以尝试...(对于派生类中的多个初始值设定项)
namespace StackOverflow
{
public class Animal
{
public int Legs { get; set; }
public string Color { get; set; }
public string Origin { get; set; }
public Animal() { Initialize(); }
public virtual void Initialize() { Legs = 4; Color = "blue"; Origin = "everywhere"; }
}
public class Human : Animal
{
public Human() { }
public override void Initialize() { Legs = 2; Color = "black"; Origin = "Africa"; }
}
public class Program
{
public static void main()
{
Animal a = new Animal();
Animal h = new Human();
}
}
}