使用子类实例化父类的列表



我有以下类:

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

ParentObject有一个继承自它的子类,ChildObject . ParentCollection 还具有以下子类:

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 error.Filter()方法也会引发类型错误。

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

这里的问题是,虽然ChildObject可以是ParentObject的孩子,List<ChildObject>不是List<ParentObject>的孩子。 List<ChildObject>List 类型的对象,List<ParentObject>

你可以像这样改变你的ParentCollection来实现你想要的。

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

您可能还想研究协变和逆变。

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

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

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

最新更新