Борьба за реализацию абстрактного свойства в производном классе - PullRequest
0 голосов
/ 10 января 2012

Все это стало немного хитрее, чем я хотел. Я использую класс 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. Поэтому я хотел бы раскрыть свойства 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

РЕДАКТИРОВАТЬ 2: Взглянув на C #: Переопределение типов возврата может быть то, что мне нужно.

1 Ответ

2 голосов
/ 10 января 2012

Потому что

 public HistoricalReportWrapper Report { get; protected set; }

не является реализацией

 public abstract IReport Report { get; protected set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...