Как заставить колекцию хранить несколько типов ? - C#
Формулировка задачи:
Здраствуйте, есть учебное задание (даю оригинал на английском):
Написал такой код, который реализует классы Cat и Dog:
Теперь проблема, я никогда не работал с колекциями и обобщениями, хотя имею представления что это и зачем. Так вот, проблема для меня, как запхать два разных типа в одну колекцию. Пробовал написать:
Но при работе я получаю ошибку приведения:
Как правильно сделать так, что б PetShop мог хранить одновременно экземпляри двух типов - Cat и Dog ?
Create next classes: Cat, Dog and Petshop.
Types Cat and Dog have fields Name and Breed and method Introduce() which prints text “I’m (Name)
of (Breed). I’m a cat (or dog)”.
The class Petshop collects in its container different pets.
We may add new pet to container by method AddPet() and we may display information about all pets
by method IntroduceAll().
Which hierarchy of classes is the best solution of this problem?
Write short code to demonstrate your solution. Your code should include class (interface) aggregation,
inheritance, should use .NET BCL collections or generics, should implement exception handling.
abstract class Animal { protected string Name; protected string Breed; abstract public void Introduce(); public Animal(string name, string breed) { this.Name = name; this.Breed = breed; } } class Cat : Animal { public override void Introduce() { Console.WriteLine("I’m {0} of {1}. I’m a cat", Name, Breed); } public Cat(string name, string breed) : base (name, breed) { this.Name = name; this.Breed = breed; } } class Dog : Animal { public override void Introduce() { Console.WriteLine("I’m {0} of {1}. I’m a dog", Name, Breed); } public Dog(string name, string breed) : base (name, breed) { this.Name = name; this.Breed = breed; } }
class PetShop { private List<Animal> petCollection; public void AddPet(Animal animal) { petCollection.Add(animal); } public void IntroduceAll() { foreach(var a in petCollection) { a.Introduce(); } } }
static void Main(string[] args) { PetShop petShop = new PetShop(); petShop.AddPet(new Cat("Cat1", "BreedCat1")); petShop.AddPet(new Cat("Cat2", "BreedCat2")); petShop.AddPet(new Cat("Cat3", "BreedCat3")); petShop.AddPet(new Dog("Dog1", "BreedDog1")); petShop.AddPet(new Dog("Dog2", "BreedDog2")); petShop.AddPet(new Dog("Dog3", "BreedDog3")); petShop.IntroduceAll(); }
Решение задачи: «Как заставить колекцию хранить несколько типов ?»
textual
Листинг программы
class PetShop { private List<Animal> petCollection; public PetShop() { petCollection = new List<Animal>(); } public void AddPet(Animal animal) { petCollection.Add(animal); } public void IntroduceAll() { foreach(var a in petCollection) { a.Introduce(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д