From 8f1eddb5575f41a8fd59878445188da135f1d55d Mon Sep 17 00:00:00 2001 From: Daniel Momot <36703311+daniel-momot@users.noreply.github.com> Date: Sun, 3 Mar 2019 10:52:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80=D0=B0=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BD=D1=83=D1=8E=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Product.cs | 156 +++++++++++++++++++++++--------------------- ProductEventArgs.cs | 37 ++++++----- Program.cs | 69 +++++++++----------- 3 files changed, 132 insertions(+), 130 deletions(-) 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