我知道这不会编译,但为什么不应该编译?
public interface IReportService {
IList<IReport> GetAvailableReports();
IReport GetReport(int id);
}
public class ReportService : IReportService {
IList<IReport> GetAvailableReports() {
return new List<ConcreteReport>(); // This doesnt work
}
IReport GetReport(int id){
return new ConcreteReport(); // But this works
}
}
答案 0 :(得分:0)
尝试更改此
IList<? extends IReport> GetAvailableReports()
答案 1 :(得分:0)
这是因为covariance。您可以在.NET 4中使用它(阅读链接)。
答案 2 :(得分:0)
我最近遇到了这个问题,并发现使用IEnumerable而不是List解决了这个问题。这是一个非常令人沮丧的问题,但一旦我找到问题的根源,它就有意义了。
以下是我用来找到解决方案的测试代码:
using System.Collections.Generic;
namespace InheritList.Test
{
public interface IItem
{
string theItem;
}
public interface IList
{
IEnumerable<IItem> theItems; // previously has as list... didn't work.
// when I changed to IEnumerable, it worked.
public IItem returnTheItem();
public IEnumerable<IItem> returnTheItemsAsList();
}
public class Item : IItem
{
string theItem;
}
public class List : IList
{
public IEnumerable<IItem> theItems; // List here didn't work - changed to IEnumerable
public List()
{
this.theItems = returnTheItemsAsList();
}
public IItem returnTheItem()
{
return new Item();
}
public IEnumerable<IItem> returnTheItemsAsList()
{
var newList = new List<Item>();
return newList;
}
}
}