努力在派生类中实现抽象属性

时间:2012-01-09 20:20:02

标签: c# inheritance interface abstract

这一切都比我想象的要复杂一点。我正在使用HistoricalReportWrapper类,因为我通过API检索我的数据,这使得直接使用HistoricalReport实现IReport变得不现实。

public abstract class CormantChart : Chart
{
    public abstract IReport Report { get; protected set; }
}

public abstract class HistoricalChart : CormantChart
{
     public override HistoricalReportWrapper Report { get; protected set; }

     public HistoricalChart(HistoricalChartData chartData) : base(chartData)
     {
         Report = GetHistoricalReport(chartData.ReportID);
     }

     protected HistoricalReportWrapper GetHistoricalReport(int reportID)
     {
         return SessionRepository.Instance.HistoricalReports.Find(historicalReport => int.Equals(historicalReport.ID, reportID));
     }
}

public class HistoricalReportWrapper : IReport
{
    public HistoricalReport inner;

    public int ID
    {
        get { return inner.ID; }
        set { inner.ID = value; }
    }
    public string Name
    {
        get { return inner.Name; }
        set { inner.Name = value; }
    }

    public HistoricalReportWrapper(HistoricalReport obj)
    {
        inner = obj;
    }
}

public interface IReport
{
    string Name { get; set; }
    int ID { get; set; }
}

这里的想法是,当我在HistoricalChart类内部工作时,我需要能够访问HistoricalReport的特定属性。但是,我的程序的其余部分只需要访问HistoricalReport的ID和Name。因此,我想向全世界公开IReport的属性,但随后将详细信息保存到课堂中。

按照目前的情况,所有继承HistoricalChart的类都会生成“不实现继承的抽象成员”以及HistoricalChart上的警告,表明我隐藏了CormantChart的报告。

宣布这个以实现我想要的正确方法是什么?

由于

编辑:哎呀,我错过了覆盖。现在,当我尝试覆盖CormantChart报告时,我收到:

'CableSolve.Web.Dashboard.Charting.Historical_Charts.HistoricalChart.Report': type must be 'CableSolve.Web.Dashboard.IReport' to match overridden member 'CableSolve.Web.Dashboard.Charting.CormantChart.Report'    C

EDIT2:看看C#: Overriding return types可能就是我需要的。

1 个答案:

答案 0 :(得分:2)

因为

 public HistoricalReportWrapper Report { get; protected set; }

不是

的实现
 public abstract IReport Report { get; protected set; }