0

我现在的情况是这样的:

我将这两个代表放在一个单独的文件中:

public delegate void EventHandler(Object obj, EventArgs e); 
public delegate void OtherEventHandler(Object obj, OtherEventArgs e); 

我有一个Event看起来像这样的类:

class Event {
   EventHandler _handler;
   public Event(EventHandler handler) {
      _handler = handler;
   }
}

我有另一个以Event这种方式继承的类:

class OtherEvent : Event {
   OtherEventHandler _handler;
   public OtherEvent (OtherEventHandler handler) : base(handler) {
      _handler = handler;
   }
}

这就是问题发生的地方。错误在于base(handler). 因为handlerinOtherEvent是一个OtherEventHandler,基类不能接受它;基类只接受EventHandler.

我的意图是拥有一个“通用”委托,这样当OtherEvent从 继承方法时EventOtherEvent仍然可以灵活地使用其自己的委托类型,并使用与其父handler类字段不同的参数。

我能做些什么来实现我的意图?

4

2 回答 2

1

使用默认委托有什么问题EventHandler<TEventArgs>?它可以用任何类型参数化,继承自EventArgs.

我也不太了解Event上课的目的。您可以通过这种方式简单地定义事件:

public event EventHandler<OtherEventArgs> OtherEvent;
于 2012-10-25T13:07:45.037 回答
0

也许使用泛型而不是继承?

class Event<TEvent>
{
    TEvent _handler;
    public Event(TEvent handler)
    {
        _handler = handler;
    }
}
于 2012-10-25T13:02:06.307 回答