Проверка в сетър
Здравейте, забелязах нещо много интересно в поведението на сет-а, ето примера:
Person firstPerson = new Person("Ivo", 10);
Person secondPerson = new Person("Asya", 13, "asya@abv.bg");
firstPerson.name = "";
Console.WriteLine(firstPerson);
Console.WriteLine(secondPerson);
Тук по условие не трябва да се приема името да е празен стринг или null и ако напиша кода така както съм го написал тук, си работи! Пробвах с дебъгер и видях, че условието в сетъра се проверява само когато се създава обекта, ако тогава името е празно - хвърля ексепшън, както съм му задал като условие, но ако има валидно име и то чак после се смени с празен стринг, то тогава си работи и приема и принтира празен стринг за име, а не би следвало. После добавих един if и в override-натия метод и вече там хваща всеки опит за пускане на невалидни данни, тоест при всеки опит за смяна на името с празен стринг си гърми, а не само при създаването на обекта, това не би ли следвало да го прави сетъра? Нормално ли е това? Според мен би следвало сетъра да проверява винаги, а не само при създаване на обекта.
Не, не е това, полетата са ми private, а пропъртито си е с голяма буква и в конструктора подавам точно неговото име и си влиза в сетъра и изпълнява условието, но само при създаване на обекта, тоест Person firstPerson = new Person("",18) в този случай гърми, понеже съм му подал празно име, но ако има име и чак после се смени, тогава вече не минава през сетъра и допуска смяната на името с ново празно име, а не гърми както би следвало.
Човек, Main-a ти е в класа Person и имаш директен достъп до полетата му. Изкарай го тоя Main в някой друг клас. И ползвай pastebin.
Проблема, е че в main метода сетваш името директно на полето вместо на пропъртито.
@supersane
Виж сега, полето си му е private. Има много по-дълбок проблем и той е, че Маin метода е там. Ти лесно ще му кажеш да смени малко n на голямо N, той ще си каже 'Аааа супер, работи!' и готово. И ще реши, че нормалното място на мейна е по средата на някой произволен клас.
Нека го изнесе някъде, компилатора ще му се скара, че се опитва да пипа private неща и сам ще разбере къде бърка.
Прав си @enevlogiev, предположих, че ще се досети, за по-дълбокия проблем. :)
Благодаря ви, наистина доста глупава грешка.