我有我想要一个抽象类,接口,这样阵列协方差在C#泛型列表
abstract class AnimalProcessor {
public abstract IList<Animal> ProcessResults();
}
然后返回一些具体实例的实例
class GiraffeProcessor : AnimalProcessor {
public override IList<Animal> ProcessResults() {
return new List<Giraffe>();
}
}
class LionProcessor : AnimalProcessor {
public override IList<Animal> ProcessResults() {
return new List<Lion>();
}
}
的问题是,具体的类需要有相同的签名覆盖ProcessResults()
方法,所以他们需要返回一个IList<Animal>
,但是我想返回的ACTUAL数据是IList<Lion>
,IList<Giraffe>
等,但是那么调用代码必须做
GiraffeProcessor processor = new GiraffeProcessor();
IList<Animal> results = processor.GetResults();
哪个不给我一个Ilist,这是我想要的。
问题
1)上面的代码不能编译。 giraffeProcessor必须返回一个具体的List<Animal>
,你可以用Giraffe
对象填充它,但是你构造返回的对象类型必须是List<Animal>
。不理想。
2)当您返回结果时,您只能得到IList<Animal>
,而不是IList<Giraffe>
。我试图明确地IList<Giraffe>
与 IList<Giraffe> results = (IList<Giraffe>) processor.GetResults();
它给出了一个运行时错误,大概是因为返回的对象不是IList<Giraffe>
,它是一个IList<Animal>
其中包含Giraffe
对象。
任何人都可以建议我做错了这里与我的设计,因为我有点难住最好的方式来完成这一点。
有一个空白的IList服务,有一个类型的IList不服务的目的是什么? – 2012-01-04 11:39:58