Подписаться на событие изменения элемента коллекции - 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!");
}
}
}