Обекти и класове
Привет,
необходимо ли е да използваме property-та в конструктора на даден клас и ако да защо(защо е грешно ако не ги ползваме)?
Поне аз до сега си създавам полете от тип public и след това си ги инициализирам в конструктора с this.
Ясно е , че property-то ни предпазва от невалидно подадени стойности,примерно char вместо int..не съм го пробвал но и с this. ако към конструктора се подаде невалиден параметър(char вместо int ) би трябвало да хвърли exception...
значи ти ще имаш списък с clients примерно и ще го потърсиш по име като гледам то ти е уникалното
и ще имаш нещо от сорта на
list<client> clients= new list<client>();
string input= ... четеш името на клиент и поръчката от тук ще вземеш name
var clientIneed= clients.select(x=>x,Name=Name).firstOrdefault(); // или можеш като метод var clientineed=clients.firstordefault(x=>x,name=Name);
if(clientIneed==null){
var client = new client{....} създаваш него и поръчката,явно този клиент е нов и идва сега.
continue;}
ако не ти е null значи вече го имаш и става
clientIneed.order.add(нещо,сума)
и готово. и честно казано аз бих си напавил Bill computed property и ще е нещо от сорта на bill= >order.Sum(x=>x.Values);
но пък реално бих извадил order да не е речник а собствен клас така или иначе цената е atribute на поръчката клиента него интересува цената докато не му потрява.а и не бих държал bill публична , но това са вече по - адвансед неща.
Аз съм си направила проверка дали клиентът вече съществува. Не знам как да му добавя нова поръчка.
имам си List<Client>clients = ......
string[] input = клиент, поръчка и т.н.
string name = input[0];
if (clients.Any(x => x.Name == name))
{ name.Order.Add(продукт, брой) } ?? не става по този начин
ами ти проверяваш само дали го има затова го правиш по моя начин дърпаш си го
clientineed=clients.firstordefault(x=>x,name=Name);
и после вече през него clientIneed.order.add(нещо сума)
това че същестува не ти е достатъчно ти трябва да го извикаш и създадеш отново за да достъпиш до неговата поръчка и да обновиш state-a които се пази в list-a
няма как да достъпиш order без да създадеш обекта нали това им е идеята да пазят информацията в себе си класовете и като поискаш да правиш нещо да си ги извикаш с обект и да напълниш каквото ти трябва или направиш каквото ти трябва.
погледни го като в релания живот :Д това че примерно знаеш че имаш кола в хладилника не означава че тя ще се отвори сама нали ще я отидеш и ще си я вземеш и чак тогава тук е същото това че знаеш че нещо съществува не ти дава достъп до него.
Благодаря, много описателно ;) Мислех, че щом вече съществува, мога само да го извикам, а то трябвало пак да се създава.
е то не е реално създаване а просто компилатора отива и гледа в памета аха имам това тук искаш го ето ти го,но да трябва да си го извикаш пак,ако го няма ще ти върне null и се оправяй. За да достъпиш property на обект/клас ти трябва инстанция и позволяващи това modifiers може така да ги направиш тея properties че само класа да си ги вижда и тн :Д но ще стигнеш и до там.