如何访问附加到派生类的值
本文关键字:派生 何访问 访问 | 更新日期: 2023-09-27 18:06:06
我有一个叫做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?
首先,对于像这样的可公开访问的值,您应该使用实际的c#属性,而不是公共字段。
在基类中标记属性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; } }
}
try this…
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) { }
}
}
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();
}
}
}