[Homework] - Делегати и събития (Dec 2015) - Решения
Здравейте колеги,
споделям решенията си на задачите за домашно:
https://github.com/vdonchev/OOPDelegatesAndEvents-Homework
Забележки, коментари и други подобни са винаги добре дошли!
Поздрави!
Здравейте колеги,
споделям решенията си на задачите за домашно:
https://github.com/vdonchev/OOPDelegatesAndEvents-Homework
Забележки, коментари и други подобни са винаги добре дошли!
Поздрави!
:) Колега, може би е удачно sum във втора задача да е decimal :). Аз понеже лихва свързвам с пари
и decimal return type.
Даже съм се чудила дали не би трябвало в такива случаи и лихвата да е decimal?
Само това погледнах понеже малко не мога да се ориентирам в условието.
Поздрави,
Василена
Здравейте,
някой дали ще може да обясни решението на 4-та задача. Като цяло тези event-и не ми станаха ясни.
Благодаря предварително!
Здравей,
ето какво предствлява моето решение:
Имаме клас Student в него си правим EventHandler с име: PropertyChangedEventHandler (делегат, който сочи към войд методи приемащи два параметъра: обект и евент аргументи)
След това правим нов Event от тип PropertyChangedEventHandler.
Отделно от този клас си правим нов клас: PropertyChangedEventArgs : EventArgs, класа PropertyChangedEventArgs ще съдържа информацията за събитието, което се е случило.
В мейна си правим студент, и метод EventChanges, който приема 2 параметъра: обект и евент аргументи от тип PropertyChangedEventArgs. Закачаме метода за OnPropertyChange евента на класа Student и започваме да променяме инфото на студента.
Обратно в Student класа, вътре в сетърите на името и годините (когато променяме нещо по студента) извикваме метода IsChnaged. Той проверява дали има закачени слушачи за евента, и ако има изпълнява евнта, който създадохме по - рано, а той от своя страна подава аргументите които са подадени на него на своите слушачи.
Не съм мн уверен че ще ме разбереш, май стана объркващо, но ...
Поздрави!
ПС. Нека някой ме поправи, ако нещо съм обяснил погрешно.
Много ти благодаря! Долу горе си го обясних.
А защо не изполваш object, вместо dynamic. Доколкото разбрах dynamic e много лошо нещо и не ни препоръчват да го ползваме :)
Ами ползвал съм динамик за да може метода да работи с всякви типове които му подам. :)
EDIT: каква ще е разликата ако позлвам object?
Още едно и от мен.
03.AsynchronousTimer/AsyncTimer.cs
Това:
private void Execute()
{
for (int i = 0; i < this.ticks; i++)
{
Thread.Sleep(this.Interval);
Console.WriteLine(this.Message);
}
}
Трябва да е така:
private void Execute()
{
for (int i = 0; i < this.ticks; i++)
{
Thread.Sleep(this.Interval);
this.Action(this.Message);
}
}
Поздрави :) И благодаря, че качваш решенията си, доста научавам от теб, не само от теб де, но ако не беше ти, доста задачи сигурно нямаше, да мога да ги реша, а и се научавам на добри практики от теб :) Да не говорим, колко задачи съм ги решавал в последния момент и то с твоя помощ, че не е имало време да ги мисля сам =)
За трета задача само аз ли съм използвал System.Timers... или съм пропуснал нещо от условието...
Поздрави
Здрасти,
Първоначално я написах с десимал, но в последствие не помня заради какво обърнах на дабъл.. (дали за да не изнасям степенуването в метод а да позлвам вградения на math..)
Иначе благодаря за коментара :)
ПС. Май беше заради лихвата, защото тя е логично да е дабъл, а в последствие трябваше да се каства към десимал. И просто избрах да позлвам дабъл :P
Така предположих и аз, че става едно кастване , ама да му мислят тия с много нули в банките :).
Правилно е да се изполва decimal за пари, защото при превъртане на макс/мин стойност хвърля ексепшън и се застраховаме от грешни резултати, което при работа с пари е важно :)