tags:

views:

415

answers:

2

I have a base class which is non-generic with a derived generic class. The AbstractRepository and ILoggingManager are provided by the IoC framework.

Base Class

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

Derived Class

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

I would like to declare a constructor in the derived class that will call the non-generic base class, but I do not know the syntax.

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

should work fine. If it doesn't, could you show the problems you're getting?

EDIT: I think the whole base class thing may be clouding the issue here. When you declare a constructor in a generic type, you don't specify the type parameters. For example, List<T> would look something like:

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

The idea is that within the class declaration, T is already known - you only specify type parameters when you want to add more of them, e.g. for a generic method like ConvertAll.

Jon Skeet
so, are you suggesting I remove the generic part from my derived class?
Antony Scott
Just in the constructor. The constructor itself isn't generic. I'll add that to my answer.
Jon Skeet
+2  A: 

Should it not be more like:

public abstract class EventHandlerBase<TDetail> : EventHandlerBase    
  where TDetail : Contracts.DeliveryItemEventDetail
{
  public EventHandlerBase(AbstractRepository data, ILoggingManager loggingManager)
    : base(data, loggingManager)
  {
     // Initialize generic class
  }
}
MortMan
I have tried that, but the compiler gave an error. I've just tried again and it is working now. Thinking about it I didn't rebuild the code per-se, I just let the background compiler kick in. Visual Studio tries to build as your going along. Obviously that doesn't quite work all the time.
Antony Scott