[OOP] Common Type System - Задача 4


9

Условие:  

Create a class Person with two fields – name and age. Age can be left unspecified (may contain null value. Override ToString() to display the information of a person and if age is not specified – to say so. Write a program to test this functionality.
 
Моята логика е: (сигурно има и по-елегантно решение):
В класа Person пропъртито Age е nullable тип, за да може да съдържа null.
Имам два конструктора - единият приема само името, и се обръща към втория със стойност null за възрастта. Вторият съответно изисква да се попълнят и името, и възрастта.
Във втория конструктор правя и съответните проверки за това възрастта да е число между 0 и 124, а името да не е null, и да е повече от eдин символ.
 
При override на ToString имах проблем - не се компилираше по-долната част от кода, докато не направих всички части на израза (по правилно е да го нарека тернарен оператор) са от един и същи тип - стринг в случая.

(this.Age.ToString()!="")?this.Age.ToString():"Not Specified")

 
Правя тест с един човек с известни име и възраст, и един на който само името е известно.
 
Ето линк към GitHub, където може да прегледате кода.
 
Поздрави



Отговори



1
А нещо пречи ли да се дефинира age като object?

от topsoft (420 точки)


0
Здравей, ако се използва базовия тип няма да имаш достъп до функциите дефинирани в структурата Int32 и другите, не можеш да извършваш матем. операции и т.н.. На object можеш можеш да присвоиш всичко, което не е коректно, трябва да работиш с конкретен тип. Трябва да обвиеш (boxing) типа Int в клас, за да може да приеме null ст-ст. Използвай класа Nullable или sugar syntax - int?

от martin.nikolov (4535 точки)


1

Ето и моето решение. Създал съм двe private полета, като аge е от null-абъл тип(както е казал колега по-горе, използвам съм sugar syntax - int. Освен това, не съм направил пропърти, макар че е хубаво да има, ако ще наследяваме класа Person или ако искаме да достъпим името или годините му, но в конкретната задача не се изисква наследяване, а за достъпване, можем да използваме директно метода ToString(). Проверката за Null е директно в метода ToString(), защото там ще се печата съобщението. Не съм сигурен, че това е най-правилното решение, така че ако имате някакви забележки - казвайте - ще поправя сгрешенето или ще подобря написаното.




0
Колега хубаво е да направите 1 конструктор, където да ползвате 2те пропъртита name, аge.

от Plamen_Petkov (1255 точки)