diff --git a/Product.cs b/Product.cs index f68c8c9..62a8de2 100644 --- a/Product.cs +++ b/Product.cs @@ -1,6 +1,7 @@ -using System; +using System; +using System.Runtime.InteropServices; -namespace Events +namespace Home_Delegates { /// /// Класс должен описывать представление о товаре. @@ -32,11 +33,16 @@ public string Name get { return name; } set { - name = value; /* * TODO #4 Инициировать уведомление об * изменении наименования */ + var args = new ProductChangedEventArgs(/*Name,*/name, value); + name = value; + if (NameChanged != null) + { + NameChanged(this, args); + } } } /// @@ -47,11 +53,16 @@ public decimal Price get { return price; } set { - price = value; /* * TODO #5 Инициировать уведомление об * изменении стоимости */ + var args = new ProductChangedEventArgs(/*Name,*/price, value); + price = value; + if (PriceChanged != null) + { + PriceChanged(this, args); + } } } @@ -62,7 +73,9 @@ public decimal Price /* * TODO #3 Добавить определение событий */ - + public event EventHandler> NameChanged; + public event EventHandler> PriceChanged; + #endregion public Product(string name, decimal price) diff --git a/ProductChangedEventArgs.cs b/ProductChangedEventArgs.cs new file mode 100644 index 0000000..413aa0f --- /dev/null +++ b/ProductChangedEventArgs.cs @@ -0,0 +1,30 @@ +using System; + +namespace Home_Delegates +{ + /// + /// Класс, который служит для передачи аргументов + /// в обработчик событий, возникающих в классе + /// Product + /// + /* + * TODO #1 Закончить определение класса ProductEventArgs + */ + public class ProductChangedEventArgs : EventArgs + { + /* + * TODO #2 Добавить определение необходимых компонент + * класса ProductEventArgs + */ + /*public string Id { get; }*/ + public T OldValue { get; } + public T NewValue { get; } + + public ProductChangedEventArgs(/*string id, */T oldValue, T newValue) + { + /*Id = id;*/ + OldValue = oldValue; + NewValue = newValue; + } + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs index b9247f7..cad90da 100644 --- a/Program.cs +++ b/Program.cs @@ -1,4 +1,6 @@ -namespace Events +using System; + +namespace Home_Delegates { class Program { @@ -22,16 +24,28 @@ static void Main(string[] args) /* * TODO #6 Назначить обработчики событий в текущем контексте */ - + product.PriceChanged += OnPriceChanged; + product.NameChanged += OnNameChanged; + product.Name = "kek"; + product.Price = 100; /* * TODO #7 Выполнить с экземпляром класса Product действия, * приводящие к возникновению описанных Вами событий */ } + private static void OnNameChanged(object sender, ProductChangedEventArgs e) + { + Console.WriteLine("Товар '{0}' изменил название с '{0}' на '{1}'", e.OldValue, e.NewValue); + } + + private static void OnPriceChanged(object sender, ProductChangedEventArgs e) + { + Console.WriteLine("Товар '{0}' изменил цену с '{1}' на '{2}'", ((Product)sender).Name, e.OldValue, e.NewValue); + } /* * TODO #8 Добавить определение обработчиков событий */ } -} +} \ No newline at end of file