C#如何在更改静态Arraylist计数时触发事件?

时间:2016-04-19 14:51:21

标签: c# winforms arraylist

我在类中有一个名为cart的静态数组列表,有没有办法实现其他类使用的事件监听器? 我是c#的新手,试图了解PropertyChangedEventHandler并没有成功。 arraylist和属性初始化如下:

session

编辑:

通过隐藏基本方法改变@KMC代码以使用List:

private static ArrayList cartList = new ArrayList();

    public static ArrayList CartList
    {
        get { return cartList; }
        set
        {
            cartList = value;
        }
    }

2 个答案:

答案 0 :(得分:2)

ArrayList中的元素数量发生变化,任何元素发生变化时,都无法收到通知。

ArrayList和.Net Framework中的大多数其他标准集合,如List<T>Dictionary和数组(WPF中的ObservableCollection等专门类除外)不提供项目通知添加/移除。您可以通过查看相应类的MSDN条目来查看它,并查看它是否实现了INotifyCollectionChanged和/或INotifyPropertyChanged。即ArrayList仅实现IList, ICollection, IEnumerable, ICloneable而没有通知接口。

如果您需要此类更改的通知,则应创建自己的类并发出此类通知,或使用ObservableCollection

附注:请考虑使用List<T>代替非通用ArrayList - ArrayList vs List<> in C#

答案 1 :(得分:2)

ArrayList类型是可扩展的。你可以覆盖添加和删除方法并触发一些事件。

for ex)

public class NewArrayList : ArrayList 
{
    public event EventHandler Change; 

    public override int Add(object value)
    { 
       var result = base.Add(value);
        this.OnChange();
        return result;
    }

    public override void Remove(object obj)
    {
        base.Remove(obj);
        this.OnChange();
    }

    protected void OnChange()
    {
        if (this.Change != null)
        {
            this.Change(this, new EventArgs() { });
        }
    }
}
public static class program
{ 
    static void Main(string[] args)
    {

        var list = new NewArrayList();
        list.Change += delegate (object sender, EventArgs arg) {
            Console.WriteLine("collect changed {0}", list.Count);
        };

        list.Add(1);
        list.Add(2);
        list.Remove(2);

    }  

}

由于ArrayList需要发送某种类型的消息(事件),而且我不确定谁会收到它,我会留给你。