diff --git a/Product.cs b/Product.cs
index f68c8c9..3e98884 100644
--- a/Product.cs
+++ b/Product.cs
@@ -1,75 +1,81 @@
-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
+ {
+ if(NameChange !=null)
+ {
+ var args = new ProductEventArgs { OldName = name, NewName = value, OldPrice = price, ChangeDate = DateTime.Today };
+ NameChange(this, args);
+ }
+
+ name = value;
+
+
+ }
+ }
+ ///
+ /// Стоимость
+ ///
+ public decimal Price
+ {
+ get { return price; }
+ set
+ {
+ if (PriceChange != null)
+ {
+ var args = new ProductEventArgs { NewName = name, OldPrice = price, NewPrice = value, ChangeDate = DateTime.Today };
+ PriceChange(this, args);
+ }
+
+ price = value;
+ }
+ }
+
+ #endregion
+
+ #region Events
+
+ public event EventHandler NameChange;
+ public event EventHandler PriceChange;
+
+ #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..6b9cbe9 100644
--- a/ProductEventArgs.cs
+++ b/ProductEventArgs.cs
@@ -1,18 +1,19 @@
-namespace Events
-{
- ///
- /// Класс, который служит для передачи аргументов
- /// в обработчик событий, возникающих в классе
- /// Product
- ///
- /*
- * TODO #1 Закончить определение класса ProductEventArgs
- */
- class ProductEventArgs
- {
- /*
- * TODO #2 Добавить определение необходимых компонент
- * класса ProductEventArgs
- */
- }
-}
+using System;
+
+namespace Events
+{
+ ///
+ /// Класс, который служит для передачи аргументов
+ /// в обработчик событий, возникающих в классе
+ /// Product
+ ///
+ sealed class ProductEventArgs : EventArgs
+ {
+ public string OldName { get; internal set; }
+ public string NewName { get; internal set; }
+ public decimal OldPrice { get; internal set; }
+ public decimal NewPrice { get; internal set; }
+ public DateTime ChangeDate { get; internal set; }
+
+ }
+}
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
index b9247f7..7c748ae 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,37 +1,32 @@
-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;
+
+namespace Events
+{
+ class Program
+ {
+
+ static void Main(string[] args)
+ {
+ Product product = new Product("Milk", 70);
+ product.NameChange += OnNameChanged;
+ product.PriceChange += OnPriceChanged;
+
+ Console.WriteLine("Starting...");
+ product.Name = "Fresh Milk";
+ product.Price = 80;
+ Console.WriteLine("Finished");
+
+ Console.ReadLine();
+ }
+
+ private static void OnPriceChanged(object sender, ProductEventArgs e)
+ {
+ Console.WriteLine("Price of " + e.NewName + " changed from " + e.OldPrice + " to " + e.NewPrice);
+ }
+
+ private static void OnNameChanged(object sender, ProductEventArgs e)
+ {
+ Console.WriteLine("Name of " + e.OldName + " changed to " + e.NewName);
+ }
+ }
+}
\ No newline at end of file