1

というクラスがありAnimalます。任意の動物についてaa.number_of_legsは4である必要があります。

Humanから継承するというクラスがありAnimalます。任意の人間に対して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

変数がを格納するため、この新しいHumanものがとして扱われていることを理解しています。AnimalyAnimal

4と2number_of_legsになるようにプロパティを設定するにはどうすればよいですか?x.number_of_legsy.number_of_legs

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 に答える