您可以拥有一个添加了子类的基本类型的集合。例如,以下将起作用:
// 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...