Подписаться на событие изменения элемента коллекции - C#
Формулировка задачи:
Здравствуйте. Есть какой-то список с элементами в нем. Мне надо, чтобы при изменении элемента вызывалось определенное событие. Именно на ИЗМЕНЕНИЕ элемента, А НЕ НА МЕТОДЫ List.Add(), List.Remove() и т.д.. Привожу код ниже, который бы доработать.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication2
- {
- //наш тип, в котором мы пропишем событие
- class EnhancedList<T> : List<T>
- {
- //вот это самое событие, которое должно произойти при изменении элемента
- //и как это осуществить???
- public event EventHandler OnItemChange;
- }
- class Program
- {
- static void Main(string[] args)
- {
- EnhancedList<int> MyList = new EnhancedList<int>();
- //подобовляем всяких чисел для примера
- MyList.Add(111);
- MyList.Add(222);
- MyList.Add(333);
- foreach (var item in MyList) Console.WriteLine(item);
- //и тут нам взбредило изменить существующий элемент
- MyList[1] = 123;
- //после этого должно произойти событие, реагирующее на изменение элемента
- Console.ReadLine();
- }
- //вот этот метод подпишем на событие
- private void MyList_ItemChanged(object sender, EventArgs e)
- {
- Console.WriteLine("Обнаружено изменение эл-та MyList!");
- }
- }
- }
Решение задачи: «Подписаться на событие изменения элемента коллекции»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApplication2
- {
- //наш тип, в котором мы пропишем событие
- class EnhancedList<T> : List<T>
- {
- //вот это самое событие, которое должно произойти при изменении элемента
- public event EventHandler OnItemChange;
- public new T this[int index]
- {
- get
- {
- return base[index];
- }
- set
- {
- base[index] = value;
- if (OnItemChange != null) OnItemChange(this, null);
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- EnhancedList<int> MyList = new EnhancedList<int>();
- MyList.OnItemChange += new EventHandler(MyList_ItemChanged);
- //подобовляем всяких чисел для примера
- MyList.Add(111);
- MyList.Add(222);
- MyList.Add(333);
- foreach (var item in MyList) Console.WriteLine(item);
- //и тут нам взбредило изменить существующий элемент
- MyList[1] = 123;
- //после этого должно произойти событие, реагирующее на изменение элемента
- Console.ReadLine();
- }
- //вот этот метод подпишем на событие
- static void MyList_ItemChanged(object sender, EventArgs e)
- {
- Console.WriteLine("Обнаружено изменение эл-та MyList!");
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д