使用Subclass实例化Parent类的List

时间:2014-03-03 10:07:00

标签: c# .net inheritance polymorphism

我有以下课程:

public abstract class ParentCollection
{
   public List<ParentObject> MyList { get; set; }

   public ParentCollection(){}
}

ParentObject有一个继承自它的子类ChildObjectParentCollection也有以下子类:

public class ChildCollection : ParentCollection
{
   public ChildCollection() : base()
   {
      this.MyList = new List<ChildObject>();
   }

   private void Filter()
   {
      this.MyList = this.Objects.Where(p => p.Age > 18).ToList();
   }
}

this.MyList = new List<ChildObject>();行正在投掷Cannot implicitly convert type errorFilter()方法也引发了类型错误。

我的理解是父对象列表应允许使用子对象进行实例化,因为该对象继承自父对象。

2 个答案:

答案 0 :(得分:2)

此处的问题是ChildObject可能是ParentObject的孩子,List<ChildObject>不是List<ParentObject>的孩子。 List<ChildObject>List类型的对象,List<ParentObject>

也是

您可以像这样更改ParentCollection以达到您想要的效果。

abstract class ParentCollection
{
    public IEnumerable<ParentObject> MyList { get; set; }

    public ParentCollection() { }
}

您可能还想查看Covarience and Contravarience.

答案 1 :(得分:1)

问题是允许通过基接口对派生类型列表进行写访问可以让你将错误类型的对象添加到列表中。

但是,如果您只需要对列表进行枚举读取访问,则可以执行以下操作:

public abstract class ParentCollection
{
    public IEnumerable<ParentObject> MyList
    {
        get;
        set;
    }

    public ParentCollection()
    {
    }
}