抽象类列表
本文关键字:列表 抽象类 | 更新日期: 2023-09-27 18:09:06
我有一个抽象类:
public abstract class MyClass
{
public abstract string nazwa
{
get;
}
}
和两个继承自MyClass的类:
public class MyClass1 : MyClass
{
public override string nazwa
{
get { return "aaa"; }
}
}
public class MyClass2 : MyClass
{
public override string nazwa
{
get { return "bbb"; }
}
}
在另一个类中创建List:
List<MyClass> myList;
现在我要创建
myList = new List<MyClass1>;
编译器显示错误:
Cannot implicitly convert type 'System.Collections.Generic.List<Program.MyClass1>' to 'System.Collections.Generic.List<Program.MyClass>'
我必须有一些简单的方法来转换它…我找不到有用的东西
您可以创建列表作为基类型:
List<MyClass> myList = new List<MyClass>();
,然后可以添加派生项到:
myList.Add(new MyClass2());
将List<Derived>
转换为List<Base>
是不安全的。
如果你写
你期望会发生什么?List<MyClass1> derivedList = ...
List<MyClass> baseList = derivedList;
baseList.Add(new MyClass2()); //Boom!
你要求协方差;协方差只能在只读接口中实现。
因此,IEnumerable<Derived>
可转化为IEnumerable<Base>
。
你必须有一个基类列表,以后你可以使用Linq来获得MyClas1项目列表,当你需要它的时候。
List<MyClass> BaseList = new ...
BaseList.FillWithItems();
List<MyClass1> DerivedList = BaseList.OfType<MyClass1>().ToList();