当前位置 : 主页 > 网络编程 > 其它编程 >

C#通用列表中的数组协方差

来源:互联网 收集:自由互联 发布时间:2023-07-02
我有一个例子,我想要一个抽象类接口来返回这样的东西abstractclassAnimalProcessor{publicabstractILi 我有一个例子,我想要一个抽象类接口来返回这样的东西 abstract class AnimalProcessor { public abstrac
我有一个例子,我想要一个抽象类接口来返回这样的东西abstractclassAnimalProcessor{publicabstractILi

我有一个例子,我想要一个抽象类接口来返回这样的东西

abstract class AnimalProcessor { public abstract IList ProcessResults();}

然后是具体的例子

class GiraffeProcessor : AnimalProcessor { public override IList ProcessResults() { return new List(); }}class LionProcessor : AnimalProcessor { public override IList ProcessResults() { return new List(); }}

问题是具体类需要具有相同的签名才能覆盖ProcessResults()方法,因此它们需要返回IList,但是我想要返回的ACTUAL数据是IList,IList等等,但调用代码必须这样做

GiraffeProcessor processor = new GiraffeProcessor();IList results = processor.GetResults();

哪个不给我一个我想要的Ilist.

问题

1)上面的代码没有编译. giraffeProcessor必须返回一个具体的List,你可以用Giraffe对象填充它,但你要构造的对象类型必须是List.不理想.

2)当您返回结果时,您只能获得IList,而不是IList.我已经尝试明确地向IList同的IList这会产生运行时错误,大概是因为返回的对象不是IList,它是IList其中包含长颈鹿的物体.

任何人都可以通过我的设计向我提出我在做错的事情,因为我有点难以实现这一目标.

解决方法:

怎么样:

abstract class AnimalProcessor where T : Animal { public abstract IList ProcessResults();}class GiraffeProcessor : AnimalProcessor { public override IList ProcessResults() { return new List(); }}class LionProcessor : AnimalProcessor { public override IList ProcessResults() { return new List(); }}

上一篇:linux中ext4和ext3有哪些区别
下一篇:没有了
网友评论