[OOP] Defining Classes Part One - Задача 2


4
Define several constructors for the defined classes that take different sets of arguments (the full information for the class or part of it). Assume that model and manufacturer are mandatory (the others are optional). All unknown data fill with null.
Здравейте!
Всички не задължителни полета трябва да бъдат overload от различни комбинации или може просто да се направи нещо от сорта public GSM(string model, string manufacturer, uint? price = null,string owner = null,Battery battery = new Battery(),Display display = new Display()), направо в конструктура?
Надявам се да съм формулирала правилно въпроса.
Благодаря предварително за отговорите!

в C# OOP от el_b_k (424 точки)


Отговори



1

Това с навързването на конструктори до голяма степен е остатък от по-старите версии на C# които не поддържаха default аргументи (с методите се правеше същото).

Ако нямаш добра причина да разделяш конструкторите, препоръчвам ти да караш с колкото се може по-малко - съкращаваш и опростяваш кода.

ПС: overLOAD


от staafl (5770 точки)


0

Значи Линк: Така  правилно ли е, че някои колеги и те писаха, че така са го правили пък така ми се видя най-лесно иначе с наследяване доста зор да уцелиш наследяването smiley


от Martin88 (209 точки)


0
Да така е, тук наследяване не е нужно, но имай предвид, че трябва да презапишеш метода ToString(), а не да правиш нов, който да принира съдържанието на обекта ( в твоя случай Print() ).

от Teodor92 (13062 точки)

0
Между другото май имам логическа грешка, понеже правя обект MyGsm и провлачвам всички класове през него, а май е по-добре те да са като отделни програми които да ги извиквам с този клас. В смисъл да са отделни .cs Файлове.

от Martin88 (209 точки)



0
Английският не ми е силна страна ....но според това което си преведох никъде на видях да пише че е неопбходимо "наследяване" на консрукторите...или по пдразбиране грамтните програмисти така биха го направили....аз го направих без ...да го оставя така или не да го преработя с наследяването

от Miroslava Vitanska (0 точки)


0
Популярен израз сред програмистите е DRY (do not repeat yourself). Стреми се да избягваш всякакво повтаряне на код, защото после програмата става по-трудна за поддръжка. При ООП наследяването се използва изключително често. Така че, където е възможно , давай смело - наследявай. :)

от el_b_k (424 точки)

0
Благодаря ти !!! :)))))

от Miroslava Vitanska (0 точки)


0
Здравей :)
Аз направих няколко различни конструктори и незадължителните полета са null по подразбиране.
Ето и моите задачи:
http://project10telerik.cloudvps.bg/?p=376
Поздрави :)

от bigerbite (33 точки)


0

Привет, надявам се да не възразявате, че bump-вам стара тема, но опря и до моят кокал и реших да споделя с вас интерпреция по второто условие. Обяснявам какво съм направил: в конструктора, който направих не съм задал стойности на параметрите отговарящи за задължителните input-и, а за незадължителните съм задал нyлеви стойности (занулил съм ги), така каквото не трябва да се въвежда е null, а без зададени стойности за задължителното- програмта просто не може да се компилира. Тък като съм начинаещ, не съм сигурен как да задам стойноти за полетата от другте два "подкласа": батерия и дисплей, затова съм ги закоментирал. Успех, надявам се да не съм кривнал много и да има доза истина в написаното, считам, че на този етап условието е изпълнено, моля ако имате забележки споделете.

http://pastebin.com/ni2wj26m




0
Default стойностите се пишат в параметрите зададени в конструктора например както си го направил с цената float userPrice = 0.0f

от IceElementor (398 точки)

0
Ясно, но ако има default-на стойност за всички, ще може да се компилира без значение дали сме дали или не сме дали стойности в основния метод за задължителните полета. Що се отнася до default стойносите, които зададох при самите полета и аз смятам, че не е необходимо, просто останах с впечатление от лекцията, че е добра практика. Да не записвам ли стойностите при декларацията на полетата? Благодаря много за вниманието!



1

Искам да попитам дали мога да ползвам само този конструктор или трябва да си направя и констурктори за всички ситуации и да ги онаследя(не съм много сигурен ,че това е правилния термин но става дума за :this(.....))?

Или може така да се ползва ,но в маин метода там където няма стойност да се пише null?(GSM fiрst = new GSM("t500", "lenovo",null,333);

 public GSM(string model, string manufacturer, string owner = null, decimal? price = null )
        {
            CheckStringIsNull(model);
            CheckStringIsNull(manufacturer);
            this.Model = model;
            this.Manufacturer = manufacturer;
            this.Owner = owner;
            this.Price = price;
        }

от xzq70r4 (72 точки)