1

我有一堂课叫Animal. 对于任何给定的动物aa.number_of_legs应该是 4。

我有一个名为的类Human,它继承自Animal. 对于任何给定的 human hh.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

我知道这个 newHuman被视为一个,Animal因为变量y存储一个Animal.

如何设置number_of_legs属性x.number_of_legs为 4 和y.number_of_legs2?

4

3 回答 3

5

首先,您应该将实际的 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; } }
}
于 2013-03-27T03:16:23.443 回答
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) { }
    }
}
于 2013-03-27T03:49:03.547 回答
0

乔,你也可以试试……(对于派生类中的多个初始值设定项)

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();
        }
    }
}
于 2013-03-27T04:26:02.753 回答