diff --git a/Product.cs b/Product.cs
index f68c8c9..cfb4acf 100644
--- a/Product.cs
+++ b/Product.cs
@@ -1,75 +1,88 @@
-using System;
-
-namespace Events
-{
- ///
- /// Класс должен описывать представление о товаре.
- /// В рамках лабораторной работы должен являться
- /// источником события
- ///
- class Product
- {
-
- #region Variables
- ///
- /// Наименование
- ///
- private string name;
- ///
- /// Стоимость
- ///
- private decimal price;
-
- #endregion
-
- #region Properties
-
- ///
- /// Наименование
- ///
- public string Name
- {
- get { return name; }
- set
- {
- name = value;
- /*
- * TODO #4 Инициировать уведомление об
- * изменении наименования
- */
- }
- }
- ///
- /// Стоимость
- ///
- public decimal Price
- {
- get { return price; }
- set
- {
- price = value;
- /*
- * TODO #5 Инициировать уведомление об
- * изменении стоимости
- */
- }
- }
-
- #endregion
-
- #region Events
-
- /*
- * TODO #3 Добавить определение событий
- */
-
- #endregion
-
- public Product(string name, decimal price)
- {
- Name = name;
- Price = price;
- }
-
- }
-}
+using System;
+
+namespace Events
+{
+ ///
+ /// Класс должен описывать представление о товаре.
+ /// В рамках лабораторной работы должен являться
+ /// источником события
+ ///
+ class Product
+ {
+
+ #region Variables
+ ///
+ /// Наименование
+ ///
+ private string name;
+ ///
+ /// Стоимость
+ ///
+ private decimal price;
+
+ #endregion
+
+ #region Properties
+
+ ///
+ /// Наименование
+ ///
+ public string Name
+ {
+ get { return name; }
+ set
+ {
+
+ /*
+ * TODO #4 Инициировать уведомление об
+ * изменении наименования
+ */
+ var args = new ProductEventArgs(name, value);
+ name = value;
+ if (NameChanged != null)
+ {
+ NameChanged(this, args);
+ }
+ }
+ }
+ ///
+ /// Стоимость
+ ///
+ public decimal Price
+ {
+ get { return price; }
+ set
+ {
+ /*
+ * TODO #5 Инициировать уведомление об
+ * изменении стоимости
+ */
+ var args = new ProductEventArgs(price, value);
+ price = value;
+ if (PriceChanged != null)
+ {
+ PriceChanged(this, args);
+ }
+ }
+ }
+
+ #endregion
+
+ #region Events
+
+ /*
+ * TODO #3 Добавить определение событий
+ */
+ public event EventHandler> PriceChanged;
+ public event EventHandler> NameChanged;
+
+ #endregion
+
+ public Product(string name, decimal price)
+ {
+ Name = name;
+ Price = price;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/ProductEventArgs.cs b/ProductEventArgs.cs
index a79a6d6..abe9ca6 100644
--- a/ProductEventArgs.cs
+++ b/ProductEventArgs.cs
@@ -1,18 +1,30 @@
-namespace Events
-{
- ///
- /// Класс, который служит для передачи аргументов
- /// в обработчик событий, возникающих в классе
- /// Product
- ///
- /*
- * TODO #1 Закончить определение класса ProductEventArgs
- */
- class ProductEventArgs
- {
- /*
- * TODO #2 Добавить определение необходимых компонент
- * класса ProductEventArgs
- */
- }
-}
+using System;
+
+namespace Events
+{
+ ///
+ /// Класс, который служит для передачи аргументов
+ /// в обработчик событий, возникающих в классе
+ /// Product
+ ///
+ /*
+ * TODO #1 Закончить определение класса ProductEventArgs
+ */
+ public class ProductEventArgs : EventArgs
+ {
+ /*
+ * TODO #2 Добавить определение необходимых компонент
+ * класса ProductEventArgs
+ */
+
+ public T Oldvalue { get; }
+ public T Newvalue { get; }
+
+ public ProductEventArgs(T oldValue, T newValue)
+ {
+ Oldvalue = oldValue;
+ Newvalue = newValue;
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
index b9247f7..d04494b 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,37 +1,54 @@
-namespace Events
-{
- class Program
- {
- internal Product Product
- {
- get
- {
- throw new System.NotImplementedException();
- }
-
- set
- {
- throw new System.NotImplementedException();
- }
- }
-
- static void Main(string[] args)
- {
- Product product = new Product("Some product name", 0);
-
- /*
- * TODO #6 Назначить обработчики событий в текущем контексте
- */
-
- /*
- * TODO #7 Выполнить с экземпляром класса Product действия,
- * приводящие к возникновению описанных Вами событий
- */
- }
-
- /*
- * TODO #8 Добавить определение обработчиков событий
- */
-
- }
-}
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Events
+{
+ class Program
+ {
+ internal Product Product
+ {
+ get
+ {
+ throw new System.NotImplementedException();
+ }
+
+ set
+ {
+ throw new System.NotImplementedException();
+ }
+ }
+
+ static void Main(string[] args)
+ {
+ Product product = new Product("Some product name", 0);
+
+ /*
+ * TODO #6 Назначить обработчики событий в текущем контексте
+ */
+ product.NameChanged += ProductNameChanged;
+ product.PriceChanged += ProductPriceChanged;
+ /*
+ * TODO #7 Выполнить с экземпляром класса Product действия,
+ * приводящие к возникновению описанных Вами событий
+ */
+ product.Name = "Телевизор Sony";
+ product.Price = 80000;
+ }
+
+ /*
+ * TODO #8 Добавить определение обработчиков событий
+ */
+ private static void ProductNameChanged(object sender, ProductEventArgs args)
+ {
+ Console.WriteLine("Название товара '{0}' изменилось на '{1}'", args.Oldvalue, args.Newvalue);
+ }
+
+ private static void ProductPriceChanged(object sender, ProductEventArgs args)
+ {
+ Console.WriteLine("Старая цена равная {0} была изменена на {1}", args.Oldvalue, args.Newvalue);
+ }
+ }
+}
\ No newline at end of file