diff --git a/Product.cs b/Product.cs index f68c8c9..eef09c6 100644 --- a/Product.cs +++ b/Product.cs @@ -32,11 +32,13 @@ public string Name get { return name; } set { + string oldName = name; name = value; /* * TODO #4 Инициировать уведомление об * изменении наименования */ + OnNameChanged?.Invoke(this, new ProductEventArgs(oldName)); } } /// @@ -47,11 +49,13 @@ public decimal Price get { return price; } set { + decimal oldPrice = price; price = value; /* * TODO #5 Инициировать уведомление об * изменении стоимости */ + OnPriceChanged?.Invoke(this, new ProductEventArgs(oldPrice)); } } @@ -62,12 +66,14 @@ public decimal Price /* * TODO #3 Добавить определение событий */ + public static event EventHandler OnNameChanged; + public static event EventHandler OnPriceChanged; #endregion public Product(string name, decimal price) { - Name = name; + Name = name; Price = price; } diff --git a/ProductEventArgs.cs b/ProductEventArgs.cs index a79a6d6..b5f912c 100644 --- a/ProductEventArgs.cs +++ b/ProductEventArgs.cs @@ -1,4 +1,6 @@ -namespace Events +using System; + +namespace Events { /// /// Класс, который служит для передачи аргументов @@ -8,11 +10,23 @@ /* * TODO #1 Закончить определение класса ProductEventArgs */ - class ProductEventArgs + class ProductEventArgs : EventArgs { /* * TODO #2 Добавить определение необходимых компонент * класса ProductEventArgs */ + + public string OldName { get; private set; } + public decimal OldPrice { get; private set; } + + public ProductEventArgs(string oldName) + { + this.OldName = oldName; + } + public ProductEventArgs(decimal oldPrice) + { + this.OldPrice = oldPrice; + } } } diff --git a/Program.cs b/Program.cs index b9247f7..a328b99 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,7 @@ -namespace Events +using System; +using System.IO; + +namespace Events { class Program { @@ -17,21 +20,45 @@ internal Product Product static void Main(string[] args) { - Product product = new Product("Some product name", 0); - + var product = new Product("Some product name", 0); + /* * TODO #6 Назначить обработчики событий в текущем контексте */ + Product.OnNameChanged += OnProductNameChanged; + Product.OnPriceChanged += OnProductPriceChanged; /* * TODO #7 Выполнить с экземпляром класса Product действия, * приводящие к возникновению описанных Вами событий */ + product.Name = "Plumbus"; + product.Price = 911; + + product.Name = "Baldezh"; + product.Price = 1729; + product.Price = 2019; } /* * TODO #8 Добавить определение обработчиков событий */ + static void OnProductNameChanged(object sender, ProductEventArgs e) + { + var product = sender as Product; + Console.WriteLine( + $"The product \"{e.OldName}\" " + + $"is now called \"{product.Name}\"." + ); + } + static void OnProductPriceChanged(object sender, ProductEventArgs e) + { + var product = sender as Product; + Console.WriteLine( + $"The \"{product.Name}\" product's price has changed " + + $"from {e.OldPrice}$ to {product.Price}$." + ); + } } }