为SortedList中的更改实现事件

时间:2009-10-05 17:33:35

标签: c# events event-handling

我希望答案就像问题一样简单,但我需要为实现SortedList的类编写一个事件。

有没有办法可以随时更改此列表(添加,修改,删除)来创建事件处理程序? Add()方法等不能覆盖。

谢谢!

2 个答案:

答案 0 :(得分:2)

不,没有。获得此类行为的最佳方法是创建一个包装SortedList<T>的新类,公开一组类似的方法,并为您关注的方法提供相应的事件。

public class MySortedList<T> : IList<T> {
  private SortedList<T> _list = new SortedList<T>();
  public event EventHandler Added;
  public void Add(T value) {
    _list.Add(value);
    if ( null != Added ) {
      Added(this, EventArgs.Empty);
    }
  }
  // IList<T> implementation omitted
}

答案 1 :(得分:1)

您应该封装它,而不是从SortedList继承。除了INotifyCollectionChanged:

之外,使您的类实现相同的接口
public class MySortedList<TKey, TValue> : IDictionary<TKey, TValue>, 
    ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
    IDictionary, ICollection, IEnumerable, INotifyCollectionChanged
{
    private SortedList<TKey, TValue> internalList = new SortedList<TKey, TValue>();

    public void Add(TKey key, TValue value)
    {
        this.internalList.Add(key,value);
        // Do your change tracking
    }
    // ... implement other methods, just passing to internalList, plus adding your logic
}