[英]C# How to trigger an event when a static Arraylist count is changed?
我在一个名为cart的类中有一个静态数组列表,有没有一种方法可以实现其他类使用的事件侦听器? 我是C#的新手,试图了解PropertyChangedEventHandler并没有成功。 arraylist和property初始化如下:
private static ArrayList cartList = new ArrayList();
public static ArrayList CartList
{
get { return cartList; }
set
{
cartList = value;
}
}
编辑:
通过隐藏基本方法,更改了@KMC代码以使用List:
public class ListOfProducts : List<Product>
{
public void Add(Product obj)
{
base.Add(obj);
this.OnChange();
}
public void UpdateLast(Product obj)
{
base[base.Count - 1] = obj;
this.OnChange();
}
public void Remove(Product obj)
{
base.Remove(obj);
this.OnChange();
}
public void Clear()
{
base.Clear();
this.OnChange();
}
public event EventHandler Change;
protected void OnChange()
{
if (this.Change != null)
{
this.Change(this, new EventArgs() { });
}
}
}
当ArrayList
中元素的数量更改或任何元素更改时,您都不会收到通知。
ArrayList
和.Net Framework中的大多数其他标准集合(如List<T>
, Dictionary
和数组)(WPF中的ObservableCollection之类的专门类除外)不提供有关已添加/已删除项目的通知。 您可以通过查看对应类的MSDN条目并查看其是否实现INotifyCollectionChanged
和/或INotifyPropertyChanged
来轻松地检查该条目。 即, ArrayList仅实现IList, ICollection, IEnumerable, ICloneable
并且没有通知接口。
如果您需要此类更改的通知,则应使用此类通知创建自己的类或使用ObservableCollection
。
旁注:请考虑使用List<T>
而不是非通用ArrayList
- C#中的ArrayList与List <> 。
ArrayList类型是可扩展的。 您可以覆盖add和remove方法并触发一些事件。
对于前)
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需要发送某种类型的消息(事件),并且我不确定谁会接收到该消息,因此我将由您自己决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.