Софтуерно Инженерство
Loading...
+ Нов въпрос
CharlieScarver avatar CharlieScarver 33 Точки

[C# OOP] Dynamic Properties

Имам въпрос за динамичните/автоматичните пропъртита. В презентацията от първата лекция по ООП имаше пример с клас Rectangle, който има полета width и height и динамично пропърти Area, което има само get и връща произведението на дължината и ширината.
Въпросът ми е как е по-добре в този контекст - Area-та да е в динамично пропърти или в направено от нас поле area и пропърти?
С динамично по-бавно ли е? Сметката всеки път ли се извършва?
Какви са предимствата на динамичните пропъртита, защо бихме ги използвали?

В третата задача от домашното, ако компонентите са лист, цената в динамично пропърти ли би трябвало да е или в наше поле/пропърти?

Тагове:
0
Advanced Level: Front-End
Filkolev avatar Filkolev 4428 Точки
Best Answer

Не съм сигурен, че динамично пропърти е точен термин в случая. Гугъл връща доста по-различни резултати за dynamic property от това, което имаш предвид. Това са просто пропъртита с гетъри, които смятат резултат и го връщат, не е много по-различно от един метод GetArea() например.

Имаш някакъв правоъгълник, на който може да му променяш размерите. Каква е алтернативата на посочения от теб вариант? Да има поле и всеки път при промяна на някоя размерност да смяташ наново лицето. Това не е особено ефикасно по няколко причини - 1) не е ясно дали и кога ще ти потябва да достъпиш лицето, а ти го смяташ многократно; 2) изпълняваш логика по промяна на две стойности в един сетър (примерно в сетъра на ширината, обновяваш ширината и лицето); 3) по-вероятно е да възникнат грешки, особено ако имаш повече пропъртита; може в някое да пропуснеш, че трябва да се обнови и още едно поле.

Когато дадена стойност зависи от други и не може да бъде директно променяна, най-логично е да имаш пропърти само с гетър. Това е правилният подход при задачата с компютрите и компонентите. Освен че си спестяваш ъпдейтването на променлива при всяко добавяне или премахване на компонент, възможно е да се получат и друг род грешки. Например възможно е да има други фактори, които влияят на крайната цена; в този случай трябва така или иначе да разписваш някаква допълнителна логика в гетъра на цената. Излиза, че за тази цена трябва да следиш всеки ред от кода, защото навсякъде потенциално може да я променяш (и сбъркаш). Много по-лесно би било ако цялата логика по изчисляването е там, където очакваш да бъде - в гетъра й.

2
CharlieScarver avatar CharlieScarver 33 Точки

Благодаря за хубавия отговор : )

0