yoi*_*cis 4 c# generics events delegates list
我是活动的新手. 此示例显示每次更改ArrayList时都会调用事件.我想知道如何使用泛型.要实现IList还是扩展List?我试着编码但是我被卡住了.
using System;
using System.Collections.Generic;
namespace Events
{
    public delegate void ChangedEventHandler(object sender, EventArgs e);
    public class ListWithChangedEvent<T> : IList<T>
    {
        public event ChangedEventHandler Changed;
        protected virtual void OnChanged(EventArgs e)
        {
            if (Changed != null)
            {
                Changed(this, e);
            }
        }
        public void Add(T value)
        {
            base.Add(value);
            OnChanged(EventArgs.Empty);
        }
        public void Clear()
        {
            base.Clear();
            OnChanged(EventArgs.Empty);
        }
        public T this[int index]
        {
            set
            {
                base[index] = value;
                OnChanged(EventArgs.Empty);
            }
        }
    }
    class EventListener
    {
        private ListWithChangedEvent<string> List;
        public EventListener(ListWithChangedEvent<string> list)
        {
            List = list;
            List.Changed += new ChangedEventHandler(ListChanged);
        }
        private void ListChanged(object sender, EventArgs e)
        {
            Console.WriteLine("This is called when the event fires.");
        }
        public void Detach()
        {
            List.Changed -= new ChangedEventHandler(ListChanged);
            List = null;
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            ListWithChangedEvent<string> list = new ListWithChangedEvent<string>();
            EventListener listener = new EventListener(list);
            list.Add("item 1");
            list.Clear();
            listener.Detach();
        }
    }
}
你可以使用ObservableCollection,你可以扩展它!
命名空间:System.Collections.ObjectModel 
程序集:WindowsBase(在WindowsBase.dll中)
每当列表发生更改时,此集合都会触发事件.(例如,添加任何项目,从列表中删除)
但请注意:如果ObservableCollection的内部属性保持更改,则它不会触发事件.如果您需要,请告诉我,我已将Observable集合扩展为具有该功能.