日期:2014-05-18  浏览次数:20967 次

类里的一个属性类型是List<>,如何获取add事件?
现在有自定义的a类,item属性类型是泛型
C# code

public class A
{
 public List<int> item { get; set; }

 //我在A类里怎么能监视这个item的增减?
}  



再别的地方给a的item做添加的时候,A类获取这个事件?
C# code

 A a = new A();
 a.item.add(1);
 //调用的地方只执行这些代码不需要额外代码



以上c#怎么能做到?

------解决方案--------------------
实在不行,楼主建个类继承List<T>然后重写Add/Remove方法吧。(可能需要同时实现IList<T>)。
protected class A : List<T>
{
public A : base(){}
public override void Add (T item){
base.Add(item); 
// 在这里调用你自己的代码,触发事件
}
}
(代码我瞎打的,就是演示一下)
------解决方案--------------------
C# code

    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.AddEvent += new AddHandler(a_AddEvent);
            a.Add(123);
            a[1] = 1234;
        }

        static void a_AddEvent(string messsage,int value)
        {
            Console.WriteLine("{0} 添加了{1}",messsage,value.ToString());
        }
    }
    public delegate void AddHandler(string message, int value);
    public class A
    {
        public event AddHandler AddEvent = null;
        private List<int> item = new List<int>();
        public int this[int index]
        {
            get {
                return this.item[index];
            }
            set
            {
                this.addValue("索引器",value);
            }
        }
        public void Add(int value)
        {
            this.addValue("A.Add",value);
        }
        private void addValue(string message,int value)
        {
            this.item.Add(value);
            if (this.AddEvent != null)
            {
                this.AddEvent(message,value);
            }
        }
        
    }