diff --git a/Product.cs b/Product.cs index f68c8c9..b7fab79 100644 --- a/Product.cs +++ b/Product.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace Events { @@ -32,11 +32,9 @@ public string Name get { return name; } set { + var args = new ProductChangedEventArgs(name, value); name = value; - /* - * TODO #4 Инициировать уведомление об - * изменении наименования - */ + NameChanged?.Invoke(this, args); } } /// @@ -46,12 +44,10 @@ public decimal Price { get { return price; } set - { + { + var args = new ProductChangedEventArgs(price, value); price = value; - /* - * TODO #5 Инициировать уведомление об - * изменении стоимости - */ + PriceChanged?.Invoke(this, args); } } @@ -59,9 +55,9 @@ public decimal Price #region Events - /* - * TODO #3 Добавить определение событий - */ + public event EventHandler> NameChanged; + + public event EventHandler> PriceChanged; #endregion @@ -73,3 +69,5 @@ public Product(string name, decimal price) } } + + diff --git a/ProductEventArgs.cs b/ProductEventArgs.cs index a79a6d6..7fdc6da 100644 --- a/ProductEventArgs.cs +++ b/ProductEventArgs.cs @@ -1,18 +1,24 @@ -namespace Events +sing System; + +namespace Events { /// /// Класс, который служит для передачи аргументов /// в обработчик событий, возникающих в классе /// Product /// - /* - * TODO #1 Закончить определение класса ProductEventArgs - */ - class ProductEventArgs + + class ProductChangedEventArgs : EventArgs { - /* - * TODO #2 Добавить определение необходимых компонент - * класса ProductEventArgs - */ + public T OldValue { get; internal set; } + + public T NewValue { get; internal set; } + + public ProductChangedEventArgs(T oldValue, T newValue) + { + OldValue = oldValue; + NewValue = newValue; + } } } + diff --git a/Program.cs b/Program.cs index b9247f7..1ef4296 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,6 @@ -namespace Events +using System; + +namespace Events { class Program { @@ -17,21 +19,24 @@ internal Product Product static void Main(string[] args) { - Product product = new Product("Some product name", 0); - - /* - * TODO #6 Назначить обработчики событий в текущем контексте - */ - - /* - * TODO #7 Выполнить с экземпляром класса Product действия, - * приводящие к возникновению описанных Вами событий - */ + Product product = new Product("Car", 1000); + + product.NameChanged += OnNameChanged; + product.PriceChanged += OnPriceChanged; + product.Name = "Super Car"; + product.Price = 10839; + } + + private void OnPriceChanged(Product sender, ProductChangedEventArgs e) + { + Console.WriteLine("Цена продукта [0] изменилась с [1] на [2]", sender.Name, e.OldValue, e.NewValue); } - /* - * TODO #8 Добавить определение обработчиков событий - */ + private void OnNameChanged(Product sender, ProductChangedEventArgs e) + { + Console.WriteLine("Название продукта [0] изменилось с [1] на [0]", e.NewValue,e.OldValue); + } } } +