我怎样才能拥有“通用”代表?

时间:2012-10-25 12:58:53

标签: c# delegates

我目前的情况如下:

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

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)上的部分有关。由于handler中的OtherEventOtherEventHandler,因此基类无法接受它;基类只接受EventHandler

我的目的是拥有一个“通用”委托,以便当OtherEvent继承Event中的方法时,OtherEvent仍然可以灵活地使用自己的委托类型和不同的参数来自handler类字段的父级。

我能做些什么来实现我的目的?

2 个答案:

答案 0 :(得分:1)

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

此外,我并不真正了解Event课程的目的。您可以通过以下方式定义事件:

public event EventHandler<OtherEventArgs> OtherEvent;

答案 1 :(得分:0)

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

class Event<TEvent>
{
    TEvent _handler;
    public Event(TEvent handler)
    {
        _handler = handler;
    }
}