Loading...
yordan.krystev avatar yordan.krystev 1 Точки

Проверка в сетър

Здравейте, забелязах нещо много интересно в поведението на сет-а, ето примера:

            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-натия метод и вече там хваща всеки опит за пускане на невалидни данни, тоест при всеки опит за смяна на името с празен стринг си гърми, а не само при създаването на обекта, това не би ли следвало да го прави сетъра? Нормално ли е това? Според мен би следвало сетъра да проверява винаги, а не само при създаване на обекта. 

 

Тагове:
0
C# OOP Basics
RoYaL avatar RoYaL Trainer 6849 Точки

Ако приемем, че не си кръстил пропъртито с малка буква (name), то не минаваш през него, респективно не минаваш и през сетъра му. В такъв случай този ред "firstPerson.name = "...."" е тотално грешен, защото излиза, че модифицираш полето, а за да модифицираш полето отвън, то значи си го направил публично. НЕ пиши публични полета, както винаги сме казвали на лекции.

2
yordan.krystev avatar yordan.krystev 1 Точки

Не, не е това, полетата са ми private,  а пропъртито си е с голяма буква и в конструктора подавам точно неговото име и си влиза в сетъра и изпълнява условието, но само при създаване на обекта, тоест Person firstPerson = new Person("",18) в този случай гърми, понеже съм му подал празно име, но ако има име и чак после се смени, тогава вече не минава през сетъра и допуска смяната на името с ново празно име, а не гърми както би следвало.

0
15/01/2016 19:02:57
enevlogiev avatar enevlogiev 1168 Точки

Човек, Main-a ти е в класа Person и имаш директен достъп до полетата му. Изкарай го тоя Main в някой друг клас. И ползвай pastebin.

2
supersane avatar supersane 234 Точки

Проблема, е че в main метода сетваш името директно на полето вместо на пропъртито.

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