如何使用带参数的非泛型基类声明泛型类的构造函数

时间:2009-02-05 16:34:44

标签: c# generics

我有一个基类,它与派生泛型类是非泛型的。 AbstractRepository和ILoggingManager由IoC框架提供。

基类

public abstract class EventHandlerBase
    : AbstractDataProvider
    , IEventHandler
{
    public EventHandlerBase(
        AbstractRepository data,
        ILoggingManager loggingManager
        )
        : base(data, loggingManager)
    {
    }
}

派生类

public abstract class EventHandlerBase<TDetail>
    : EventHandlerBase
    where TDetail : Contracts.DeliveryItemEventDetail
{
}

我想在派生类中声明一个构造函数,它将调用非泛型基类,但我不知道语法。

2 个答案:

答案 0 :(得分:4)

public class EventHandlerBase(AbstractRepository data,
                              ILoggingManager loggingManager)
     : base(data, loggingManager)
{
     // Whatever
}

应该可以正常工作。如果没有,你能表明你遇到的问题吗?

编辑:我认为整个基类可能会让问题蒙上阴影。在泛型类型中声明构造函数时,不指定类型参数。例如,List<T>看起来像:

public class List<T>
{
    public List()
    {
    }
}

我们的想法是,在类声明中,T已知 - 当您想要添加更多时,您只需指定类型参数,例如对于像ConvertAll这样的通用方法。

答案 1 :(得分:4)

不应该更像:

public abstract class EventHandlerBase<TDetail> : EventHandlerBase    
  where TDetail : Contracts.DeliveryItemEventDetail
{
  public EventHandlerBase(AbstractRepository data, ILoggingManager loggingManager)
    : base(data, loggingManager)
  {
     // Initialize generic class
  }
}