Добавление наследников в отдельный лист

изучаю ООП, не могу разобраться с следующей проблемой. Имеются вольеры с животными Aviary. У каждого животного Animal есть пол Gender и издаваемый животным звук Sound. Я хочу создать лист с вольерами aviaries и затем в каждый вольер добавлять сразу наследника, т.е. Pig или Frog.

Т.е. просто лист с животными я могу сделать например вот так

List<Animal> pigsHouse = new List<Animal>
            {
                new Animal("M", "Хрю-Хрю"),
                new Animal("Ж", "Хрю-Хрю"),
                new Animal("M", "Хрю-Хрю"),
            };

Но я же изучаю ООП, и хочу добавлять наследника, с уже готовым звуком, прописанным в классе и лишь просто дописывать пол. Т.е. в идеале должно быть что-то такое:

Aviary aviary = new Aviary()
                {
                    new Pig("M"),
                    new Pig("Ж"),
                    new Pig("M"),
                };

Но такая инициализация выдает мне ошибку, потому что здесь создан просто объект, а не лист

Вот весь код:

class Program
    {
        static void Main(string[] args)
        {
            List<Aviary> aviaries = new List<Aviary>();
            Aviary aviary = new Aviary();
        }
    }

    class Aviary
    {
        public List<Animal> Animals { get; }

        public Aviary()
        {
            Animals = new List<Animal>();
        }
    }

    class Animal
    {
        public string Gender { get; private set; }
        public string Sound { get; private set; }

        public Animal(string gender, string sound)
        {
            Gender = gender;
            Sound = sound;
        }
    }

    class Pig : Animal
    {
        public Pig(string gender, string sound) : base(gender, "Хрю-Хрю") { }
    }

    class Frog : Animal
    {
        public Frog(string gender, string sound) : base(gender, "Ква-Ква") { }
    }

    class Duck : Animal
    {
        public Duck(string gender, string sound) : base(gender, "Кря-Кря") { }
    }

    class Dog : Animal
    {
        public Dog(string gender, string sound) : base(gender, "Гав-Гав") { }
    }

Всего должно быть 4 вольера. Подскажите где моя ошибка и что я делаю не так?


Ответы (1 шт):

Автор решения: Aziz Umarov

Вы хотите сделать свой список а делаете композицию

class Aviary:List<Animal>
{
      
}

Это будет работать с вашим идеалом. Если хотите оставить

class Aviary
{
    public List<Animal> Animals { get; }

    public Aviary()
    {
        Animals = new List<Animal>();
    }
}

То думаю нужно инициализировать Animals так

  Aviary aviary = new Aviary()
            {
               Animals = new List<Animal> {
                new Pig("M"),
                new Pig("Ж"),
                new Pig("M"),
              }
            };
→ Ссылка