Добавление наследников в отдельный лист
изучаю ООП, не могу разобраться с следующей проблемой. Имеются вольеры с животными 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 шт):
Вы хотите сделать свой список а делаете композицию
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"),
}
};