Подписаться на событие изменения коллекции - C#
Формулировка задачи:
Собственно как?
Имеются такие коллекции
при каждом изменении их элементов (добавление/удаление и т.д.) должен отрабатывать какой либо метод
List<string> scanUrls = new List<string>();
HashSet<string> resUrls = new HashSet<string>();Решение задачи: «Подписаться на событие изменения коллекции»
textual
Листинг программы
class Program
{
static void Main(string[] args)
{
ScanUrls scanUrls = new ScanUrls();
scanUrls.Event += scanUrls_Event;
//далее работаем как обычно с List
scanUrls.Add("1");
scanUrls.Add("2");
scanUrls.Remove("2");
scanUrls.Reverse();
}
static void scanUrls_Event(object sender, ScanUrlsEvenArgs e)
{
switch (e.Message)
{
case "Add":
Console.WriteLine("Событие Add для scanUrls");
break;
case "Remove":
Console.WriteLine("Событие Remove для scanUrls");
break;
}
}
}
class ScanUrls : List<string>
{
public event EventHandler<ScanUrlsEvenArgs> Event;
new public void Add(string item)
{
base.Add(item);
OnEvent("Add");
}
new public void Remove(string item)
{
base.Remove(item);
OnEvent("Remove");
}
private void OnEvent(string message)
{
if (Event != null)
Event(this,new ScanUrlsEvenArgs(message));
}
}
class ScanUrlsEvenArgs : EventArgs
{
public ScanUrlsEvenArgs(string message)
{
Message = message;
}
public string Message { get; private set; }
}