C # inheritance in generic question


I have two interfaces:

public interface A {
 void aMethod();

public interface B : A {
 void bMethod();

Later I'm basically using a dictionary like this:

Dictionary<int, A> dict = new Dictionary<int, B>();

C# is saying I can't convert from the right to the left, even if I cast it. Is there a way to use generics in C# so that this can work? If I make them abstract classes it seems to be ok but I need these as interfaces.

The feature you are looking for is what's referred to as generics variance (covariance and contravariance). There is limited support for this starting in .net framework 4. Here's an interesting post: How is Generic Covariance & Contra-variance Implemented in C# 4.0?

And here's the MSDN entry on Covariance and Contravariance in Generics.