Loading...
EngirooSan avatar EngirooSan 38 Точки

Обекти и класове

Привет,

необходимо ли е да използваме property-та в конструктора на даден клас и ако да защо(защо е грешно ако не ги ползваме)?

Поне аз до сега си създавам полете от тип public и след това си ги инициализирам в конструктора с this.

Ясно е , че property-то ни предпазва от невалидно подадени стойности,примерно char вместо int..не съм го пробвал но и с this. ако към конструктора се подаде невалиден параметър(char вместо int ) би трябвало да хвърли exception...

 

Тагове:
1
Module: C# Advanced
Tsekova avatar Tsekova 10 Точки

Здравейте, имам един въпрос, елементарен предполагам, но не можах да го схвана. Решавам следната задача: клиенти, които си поръчват напитки и трябва да сметна сума за плащане.

class Client
    {
        public string Name { get; set; } // име на клиента
        public Dictionary<string, int> Order { get; set; } // поръчка по артикул и брой
        public decimal Bill { get; set; } // сметка

    }

    class Program
    {
        static void Main(string[] args)

        { ...  }}

Въпросът ми е при съществуващ вече клиент, как да допълня точно неговия Order? Не знам как да достъпя самия речник. Тепърва уча класовете, надявам се че го обясних правилно :D
     

 

0
08/08/2018 15:47:10
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

значи ти ще имаш списък с 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 публична , но това са вече по - адвансед неща.

 

 

0
08/08/2018 16:33:28
Tsekova avatar Tsekova 10 Точки

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

имам си List<Client>clients = ......

string[] input = клиент, поръчка и т.н.

string name = input[0];

if (clients.Any(x => x.Name == name))

{ name.Order.Add(продукт, брой) } ?? не става по този начин

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

ами ти проверяваш само дали го има затова го правиш по моя начин дърпаш си го 

clientineed=clients.firstordefault(x=>x,name=Name);

и после вече през него clientIneed.order.add(нещо сума)

това че същестува не ти е достатъчно ти трябва да го извикаш и създадеш отново за да достъпиш до неговата поръчка и да обновиш state-a които се пази в list-a 

няма как да достъпиш order без да създадеш обекта нали това им е идеята да пазят информацията в себе си класовете и като поискаш да правиш нещо да си ги извикаш с обект и да напълниш каквото ти трябва или направиш каквото ти трябва.

погледни го като в релания живот :Д това че примерно знаеш че имаш кола в хладилника не означава че тя ще се отвори сама нали ще я отидеш и ще си я вземеш и чак тогава тук е същото това че знаеш че нещо съществува не ти дава достъп до него.

0
08/08/2018 17:02:29
Tsekova avatar Tsekova 10 Точки

Благодаря, много описателно ;) Мислех, че щом вече съществува, мога само да го извикам, а то трябвало пак да се създава.

0
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

е то не е реално създаване а просто компилатора отива и гледа в памета аха  имам това тук искаш го ето ти го,но да трябва да си го извикаш пак,ако го няма ще ти върне null и се оправяй. За да достъпиш property на обект/клас ти трябва инстанция и позволяващи това modifiers може така да ги направиш тея properties че само класа да си ги вижда и тн :Д но ще стигнеш и до там.

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