在关于使用IEnumerable而不是List的初始建议之后进行编辑。在C#中返回一个列表<interface>
我试图做到这一点:
public interface IKPIDetails // Previously: interface IKPIDetails
{
string name {get; set;}
//...
}
public abstract class BaseReport
{
public List<IKPIDetails> m_KPIDetails; // Previously: list<IKPIDetails> m_KPIDetails;
public BaseReport()
{
m_KPIDetails = MakeReportDataStructure();
//...
}
public abstract List<IKPIDetails> MakeReportDataStructure(); // Previously: public abstract IKPIDetails MakeReportDataStructure();
//...
}
public class AirTemp_KPIDetails : NetVisSolution.Reports.IKPIDetails // Previously: protected class AirTemp_KPIDetails : IKPIDetails
{
#region IKPIDetails implementation
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
#endregion
...
}
public class SSAirTempSummaryReport : BaseReport
{
public SSAirTempSummaryReport() : base()
{
// Do any extra initialisation here
m_reportName = "Air Temperature Summary Report";
}
//It now complains on the declaration below at the word
// MakeReportDataStructure()
public override IEnumerable<IKPIDetails> MakeReportDataStructure() // Previously: public override List<IKPIDetails> MakeReportDataStructure()
{
List<AirTemp_KPIDetails> d = new List<AirTemp_KPIDetails>();
return d; // <-- this is where it used to break
}
//...
}
所以我有一个报告数据对象接口和实现这个接口,并加入他们的具体额外位潜在的多个报告数据类。我有一个抽象报告类实现通用报告功能和多个派生类,每个派生类都使用自己的报告数据类。
不幸的是,当我尝试在派生类中创建我的报告的详细结构的列表,并将其传递回基类作为接口的列表,它抱怨:
Cannot implicitly convert type
'System.Collections.Generic.List<NetVisSolution.Reports.AirTemp_KPIDetails>' to
'System.Collections.Generic.List<NetVisSolution.Reports.IKPIDetails>'
它赢得了”不要让我隐式或明确地做。有什么办法可以做到这一点?
在此先感谢,
--- Alistair。
谢谢,我可以看到我想要做什么可能是不可能的,或者至少是危险的。但我仍然希望!我可能只需要列出通用数据和另一个完全属于每个派生类的特定于报表的列表。 – user41013