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