2012-01-09 15 views
0

これは私が意図したよりもややこしいものでした。 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と名前にアクセスする必要があります。そのため、私は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を見てとることは、私は必要なものかもしれません。

答えて

2

public HistoricalReportWrapper Report { get; protected set; } 

は申し訳ありませんが、

public abstract IReport Report { get; protected set; } 
+0

のErrの実装ではありませんので。私はオーバーライドを見逃して、それを追加しましたが、まだ行きません。 HistoricalReportWrapperはIReportを実装していますが、私が意図したことをする方法はありますか? –

+0

最初は不動産抽象化はなぜですか? 'IReport'プロパティを世界に公開したいとします。 –

+0

CormantChartは抽象クラスであり、それ自身を設定する能力を持たないため抽象的なとマークしました。このように、実装は派生クラスによって処理されると思いましたか?私はそれを抽象的なものとしてマークしていないと、何が役立つでしょうか? –

関連する問題