List の代わりに IEnumerable を使用することに関する最初の提案の後に編集されました。
私はこれをやろうとしています:
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>'
暗黙的または明示的にそれを行うことはできません。これを行う方法はありますか?
前もって感謝します、
--- アリステア。