最好的方式来处理多个类的事件?

所以我有一堂课,基本上是另一堂课的20个副本的管理员.处理从每个事件中触发的同一事件的最佳方法是什么?这是注销事件的最佳方法吗?还是应该以某种方式使用单个EventHandler?

我整理了一个简单的示例,基本上可以完成我在实际项目中的工作.

class Manager
{
    List<Child> children = new List<Child>();

    public Manager()
    {
        for (int i = 0; i < 10; i++)
        {
            Childchild = new Child();
            child.Done += child_Done;
            items.Add(child);
            child.DoStuff();
        }
    }

    public void RemoveAll()
    {
        foreach (Child child in items)
        {
            child.Done -= child_Done;
        }
        items.Clear();
    }

    void child_Done(string sometext)
    {
        Console.WriteLine("child done: " + sometext);
    }
}

class Child
{
    public delegate void _Done(string sometext);
    public event _Done Done;

    public Child()
    {

    }

    public void DoStuff()
    {
        if (Done != null) { Done("finally!"); }
    }
}

解决方法:

取消注册应该没问题-只要目标实例和方法匹配,它将起作用.但是,我强烈建议您与发件人一起使用更常规的事件模式-然后,您将知道哪个孩子在说话.例如:

public class MessageEventArgs : EventArgs {
    public MessageEventArgs(string message) {
        this.message = message;
    }
    private readonly string message;
    public string Message { get { return message; } }
}

和:

public event EventHandler<MessageEventArgs> Done;
protected virtual void OnDone(string message) {
    var handler = Done;
    if(handler != null) handler(this, new MessageEventArgs(message));
}
上一篇:C#-事件订阅和变量覆盖


下一篇:Android自定义事件到javascript EventListener