Професионална програма
Loading...
markovood avatar markovood 10 Точки

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

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

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

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

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

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

0
C# OOP Basics
nickwork avatar nickwork 655 Точки
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 10 Точки

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

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

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

if (firstLine == "Beast!")
                {

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

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

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

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

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

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

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

0