Loading...
+ Нов въпрос
markovood avatar markovood 11 Точки

C# OOP - юни 2019, Inheritance - Exercise, проблем 06. Animals

Здравейте колеги,

така и неможах да отлепя от 20/100 в джъджъ с тази задача, моля някой по навътре в нещата да погледне и да сподели къде греша...

Тук условието на задачата

Тук моето решение

Задачата така и не беше решена от водещия упражнението въпреки че обеща...

0
C# OOP Basics
nickwork avatar nickwork 657 Точки
Best Answer

Първо изкарай всеки клас в отделен файл, после в абстрактният клас добави това 

public abstract string ProduceSound(); // като този метод ot void го направи стринг string  

        public override string ToString()
        {
            var builder = new StringBuilder();

            builder.AppendLine(this.GetType().Name)
                .AppendLine($"{this.name} {this.age} {this.gender.ToString()}")
                .Append($"{this.ProduceSound()}");

            return builder.ToString();
        }

 

После махни това от тук в класа StartUp

if (firstLine == "Beast!")
                {

                  //тука печаташе крайният резултат - махни го при теб
                    break;
                }

И накрая след while() цикъла добави този foreach

foreach (var animal in animals)
            {
                Console.WriteLine(animal);
            }

Тествах твоят код - по този начин с тези промени дава 100/100

0
markovood avatar markovood 11 Точки

Благодаря колега, че си отделил време за да ми помогнеш.

Няма да се съглася само с няколко неща: 

После махни това от тук в класа StartUp

if (firstLine == "Beast!")
                {

                  //тука печаташе крайният резултат - махни го при теб
                    break;
                }

И накрая след while() цикъла добави този foreach

foreach (var animal in animals)
            {
                Console.WriteLine(animal);
            }

Това върши съвсем същата работа като моя код, с други думи дали ще спреш цикъла и ще напечаташ резултата ИЛИ ще напечаташ резултата и след това ще спреш цикъла е все едно!

За използването на .ToString() - Аз прецених че това е просто друг начин, а именно с изнасяне на отделен метод който печата, струва ми се по разбираемо и по четимо така, тъй или иначе не се дублира код а и не се спестява писане на излишен такъв

Оказва се че проблема всъщност е в това, че методът ProduceSound() е void, открих го благодарение на теб...Смятам че е по адкватно да има в базовия клас абстрактен метод(такъв без имплементация) за да може всеки да е задължен да си го имплементира (по подходящ начин), все пак никъде не е казано изрично че ProduceSound() трябва да връща резултат. А и когато даденото животно издава звук не се споменава да трябва да има резултат от това действие затова мисля че е по логично метода да е void...

Както и да е, благодаря за помощта и отделеното време!

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.