Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Инкапсуляция, наследование + полиморфизм


Автор: blackwitcher 18.5.2015, 11:30
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(). 


P.S.: сам сделал, но не так как хотелось бы

Автор: infarch 18.5.2015, 18:08
Задача от SoftServe?

Автор: diadiavova 19.5.2015, 11:52
Цитата(blackwitcher @  18.5.2015,  11:30 Найти цитируемый пост)
 сам сделал, но не так как хотелось бы 

Собака унаследована от кошки, а зоомагазин от собаки? smile 
Тебе надо создать абстрактный класс или интерфейс Pet. Собаки и кошки будут унаследованы от него(или, в случае интерфейса, он будет реализован в этих классах). Методы и свойства, присутствующие в обоих классах вынеси в базовый. А в зоомагазине создай свойство типа List<Pet>, в которое и загружай экземпляры обоих классов. Ну и для вывода на экран информации об экземплярах, просто вызывай метод, определенный в Pet.

Автор: blackwitcher 19.5.2015, 11:56
спасибо, diadiavova

Автор: blackwitcher 19.5.2015, 11:56
кое-что сделал, а дальше как - не знаю  smile 

Автор: diadiavova 19.5.2015, 12:59
Цитата(blackwitcher @  19.5.2015,  11:56 Найти цитируемый пост)
кое-что сделал, а дальше как - не знаю

Ну, уже неплохо, но метод интродьюс тоже надо вынести в базовый класс. И здесь одно из двух: либо сделать его абстрактным и определять в производных классах, либо в базовый класс добавить  свойство, которое будет возвращать полседнее слово в тексте интродьюса и использовать значение этого свойства для генерации текста. А само свойство (видимо доступное только для чтения) уже переопределять в производных классах. Второй вариант логичен в силу того, что основной текст генерируется один и тот же, а меняется только последнее слово.

В зоомагазин добавь поле List<Pet>, определи методы добавления и представления всех. Метод AddPet будет принимать питомца и добавлять его в список, а IntroduceAll - обходить всю коллекцию и вызывать у каждого элемента Introduce

Автор: blackwitcher 19.5.2015, 13:11
спасибо, diadiavova smile , сейчас сделаю 

Автор: blackwitcher 19.5.2015, 13:30
думаю, что так правильно?

Автор: baldina 19.5.2015, 14:03
не совсем

Код

abstract class Pet {
...
public abstract string Type ();
 
public void Introduce() 
{
        Console.WriteLine("I am {0} of {1}. I’m a {2}.", Name, Breed, Type());
}
...
}


Добавлено через 53 секунды
в Dog и Cat - override string Type()

Автор: blackwitcher 20.5.2015, 22:15
Спасибо

Автор: blackwitcher 10.6.2015, 14:54
всем спасибо, тема закрыта

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)