在事件中使用具有自定义参数的委托

本文关键字:参数 自定义 事件 | 更新日期: 2023-09-27 18:35:18

我有如下所示的代码。我遇到的问题是这部分代码给出了编译错误。

Changed(this, new ListChangedEventArgs(Operation.Add, e.Value, 1));

错误 1 使用泛型类型"CustomDatastructures.Core.ListChangedEventArgs"需要 1 个类型参数

第二个问题是如何调用onChanged方法。


//public delegate void ListChanged<TEventArgs>(object sender, TEventArgs e);
public delegate void BeforeListChanged<TEventArgs>(object sender, TEventArgs e);
public delegate void ListChanged<TEventArgs>(object sender, TEventArgs e);
// Make this class generic by adding a type-parameter to the class
public class ObservableList<T> : IEnumerable<T>
{
    // Declare an private variabel to work as 
    // the internal data storage for the list
    List<T> observerList = new List<T>();
    public event ListChanged<ListChangedEventArgs<T>> Changed;
    //public event BeforeListChanged<T> BeforeChanged;
    protected virtual void OnChanged(object sender, Operation op, T value, int count)
    {
        if (Changed != null)
            Changed(this, new ListChangedEventArgs(op, value, count));
    }

    /// <summary>
    /// Add and object to the list
    /// </summary>
    /// <param name="item">An object</param>
    public void Add(T item)
    {
        observerList.Add(item);
        OnChanged(this, Operation.Add, item, 1);
    }

这是 ListChangedEvent 类的定义

public class ListChangedEventArgs<T> : EventArgs
{
public int Count { get; }
public Operation Operation { get; }
public T Value { get; }
public ListChangedEventArgs(Operation operation, T value, int count)
}

在事件中使用具有自定义参数的委托

您正在声明类型 TObservableCollection。此集合具有事件ListChanged<T>。但是你称这个事件好像它是ListChanged<ListChangedEventArgs<T>>.因此,您必须更改事件的声明:

public event ListChanged<ListChangedEventArgs<T>> Changed;
protected virtual void OnChanged(object sender, ListChangedEventArgs<T> e)
{
    if (Changed != null)
        Changed(this, e);
}