Подписаться на событие изменения элемента коллекции - 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!"); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д