У вас может быть коллекция базового типа с добавленными подклассами.Например, будет работать следующее:
// Using:
public class Foo {} // Base class
public class Bar : Foo {} // Subclass
// Code:
List<Foo> list = new List<Foo>();
HashSet<Foo> hash = new HashSet<Foo>();
list.Add(new Bar());
list.Add(new Foo());
hash.Add(new Bar());
Так как «Bar» - это определенный тип «Foo», совершенно законно добавлять его в коллекцию Foo.
Однако,до .NET 4 и модификатора out для ковариации вы не можете выполнить:
IEnumerable<Foo> list = new List<Bar>(); // This isn't supported in .NET 3.5...