From a46d1a77f33f6d8a9c992e99ac72f993ec5c52cc Mon Sep 17 00:00:00 2001
From: molodikova <47817751+molodikova@users.noreply.github.com>
Date: Sat, 2 Mar 2019 01:18:18 +0300
Subject: [PATCH] lab-1_mldkv_/3
---
Product.cs | 160 +++++++++++++++++++++++---------------------
ProductEventArgs.cs | 44 +++++++-----
Program.cs | 79 +++++++++++++---------
3 files changed, 158 insertions(+), 125 deletions(-)
diff --git a/Product.cs b/Product.cs
index f68c8c9..5b76a4d 100644
--- a/Product.cs
+++ b/Product.cs
@@ -1,75 +1,85 @@
-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
+ {
+ name = value;
+ /*
+ * TODO #4 Инициировать уведомление об
+ * изменении наименования
+ */
+ if(NameChanged != null)
+ {
+ NameChanged(this, new ProductEventArgs(name, value));
+ }
+ }
+ }
+ ///
+ /// Стоимость
+ ///
+ public decimal Price
+ {
+ get { return price; }
+ set
+ {
+ price = value;
+ /*
+ * TODO #5 Инициировать уведомление об
+ * изменении стоимости
+ */
+ if(PriceChanged != null)
+ {
+ PriceChanged(this, new ProductEventArgs(price, value));
+ }
+ }
+ }
+
+ #endregion
+
+ #region Events
+
+ /*
+ * TODO #3 Добавить определение событий
+ */
+ public event EventHandler NameChanged;
+ public event EventHandler PriceChanged;
+
+ #endregion
+
+ public Product(string name, decimal price)
+ {
+ Name = name;
+ Price = price;
+ }
+
+ }
+}
diff --git a/ProductEventArgs.cs b/ProductEventArgs.cs
index a79a6d6..344ccfc 100644
--- a/ProductEventArgs.cs
+++ b/ProductEventArgs.cs
@@ -1,18 +1,26 @@
-namespace Events
-{
- ///
- /// Класс, который служит для передачи аргументов
- /// в обработчик событий, возникающих в классе
- /// Product
- ///
- /*
- * TODO #1 Закончить определение класса ProductEventArgs
- */
- class ProductEventArgs
- {
- /*
- * TODO #2 Добавить определение необходимых компонент
- * класса ProductEventArgs
- */
- }
-}
+namespace Events
+{
+ ///
+ /// Класс, который служит для передачи аргументов
+ /// в обработчик событий, возникающих в классе
+ /// Product
+ ///
+ /*
+ * TODO #1 Закончить определение класса ProductEventArgs
+ */
+ class ProductEventArgs : EventArgs
+ {
+ /*
+ * TODO #2 Добавить определение необходимых компонент
+ * класса ProductEventArgs
+ */
+ public string OldName { get; }
+ public decimal OldPrice { get; }
+
+ public ProductEventArgs(string oldName, decimal oldPrice)
+ {
+ OldName = oldName;
+ OldPrice = oldPrice;
+ }
+ }
+}
diff --git a/Program.cs b/Program.cs
index b9247f7..e219b80 100644
--- a/Program.cs
+++ b/Program.cs
@@ -1,37 +1,52 @@
-namespace Events
-{
- class Program
- {
- internal Product Product
+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 product = new Product("Библия C#", 736);
+ product.NameChanged += OnProductNameChanged;
+ product.PriceChanged += OnProductPriceChanged;
+
+ /*
+ * TODO #7 Выполнить с экземпляром класса Product действия,
+ * приводящие к возникновению описанных Вами событий
+ */
+ product.Name = "Философия Java";
+ product.Price = 1499;
+
+ }
+
+ /*
+ * TODO #8 Добавить определение обработчиков событий
+ */
+ private static void OnProductNameChanged(object sender, ProductEventArgs e)
{
- get
- {
- throw new System.NotImplementedException();
- }
-
- set
- {
- throw new System.NotImplementedException();
- }
+ Console.WriteLine("Имя продукта было изменено с '{0}' на '{1}'", e.OldName, e.Product.Name);
}
-
- static void Main(string[] args)
+ private static void OnProductPriceChanged(object sender, ProductEventArgs e)
{
- Product product = new Product("Some product name", 0);
-
- /*
- * TODO #6 Назначить обработчики событий в текущем контексте
- */
-
- /*
- * TODO #7 Выполнить с экземпляром класса Product действия,
- * приводящие к возникновению описанных Вами событий
- */
+ Console.WriteLine("Цена продукта была изменена с '{0}' на '{1}'", e.OldName, e.Product.Price);
}
-
- /*
- * TODO #8 Добавить определение обработчиков событий
- */
-
}
-}
+}
+ }
+}