As Andrey says, you want (generic) covariance. However:
- Generic variance is only supported in C# 4
- Generic variance isn't supported on classes
- In your real life case, this may be unsafe.
To go into the final point, suppose DalBase<T>
has this method:
void AddEntity(T entity)
Now you've got something like this which you want to be able to compile - but would obviously be dangerous:
DalBase<Fruit> fruitDal = new DalBase<Banana>();
fruitDal.AddEntity(new Apple());
The second line would have to compile - so for this to fail at compile time, it has to be the first line which would fail.
I gave an hour long talk on generic variance recently which you may find useful if you want to know more - see the NDC 2010 video page and search for "variance". Alternatively you could read Eric Lippert's blog posts on the topic - but be aware that that will probably take longer than an hour ;)