基本上:
public delegate void RecvCommandHandler (ChatApplication sender, byte[] content);
event RecvCommandHandler[] commands = new RecvCommandHandler[255];
我想为每个命令编号激活一个不同的方法/函数,但我真的不确定语法.我该怎么办呢?
我想我会选择一系列代表,但这个问题仍然很有趣.
小智 11
您可以使用运算符重载创建一个类的数组,以模拟您感兴趣的行为...
public delegate void EventDelegate(EventData kEvent);
public class EventElement
{
    protected event EventDelegate eventdelegate;
    public void Dispatch(EventData kEvent)
    {
        if (eventdelegate != null)
        {
            eventdelegate(kEvent);
        }
    }
    public static EventElement operator +(EventElement kElement, EventDelegate kDelegate)
    {
        kElement.eventdelegate += kDelegate;
        return kElement;
    }
    public static EventElement operator -(EventElement kElement, EventDelegate kDelegate)
    {
        kElement.eventdelegate -= kDelegate;
        return kElement;
    }
}
public EventElement[] commands = new EventElement[255];
commands[100] += OnWhatever;
commands[100].Dispatch(new EventData());
commands[100] -= OnWhatever;
实际上没有一系列事件的概念 - 就像谈论一系列属性一样.事件实际上只是允许您订阅和取消订阅处理程序的方法.如果您需要能够通过索引执行此操作,我建议您只使用一对方法.(AddCommandHandler(int, RecvCommandHandler)和RemoveCommandHandler(int, RecvCommandHandler)).当然,这不会支持正常的事件处理语法糖,但我没有看到有很多替代品.