我有我想要一個抽象類,接口,這樣陣列協方差在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