私は基本的なメディアプレーヤーのプログラミングに取り組んでおり、ポリモーフィックコードの記述に問題があります。これは私が研究したことですが、実際に実装したことはありません。
関連するクラスは、MediaInfo、MovieInfo、Media、Movieの4つです。
MediaInfoは、すべてのメディアファイルに関連する情報を保持する抽象基本クラスです。MovieInfoはMediaInfoを継承し、ビデオファイルに固有の情報を追加します。
メディアは、すべてのメディアファイルを表す抽象基本クラスです。映画はメディアから継承します。
これで、Mediaには次のコード行が含まれます。
protected MediaInfo info;
Mediaの中には、MediaInfoから情報を抽出するアクセサーがあります。ただし、Movie内には、MovieInfoからも情報を抽出するアクセサーが必要です。
だから私がMovieの中でしたことは:
protected MovieInfo info;
そしてコンストラクターの内部:
this.info = new MovieInfo(path);
しかし、今私はアクセサーを持っています:
/// <summary>
/// Gets the frame height of the movie file.
/// </summary>
public string FrameHeight
{
get
{
return this.info.FrameHeight;
}
}
問題は、FrameHeightがMovieInfo内でのみ使用可能なアクセサーであるということです。this.infoは、MovieInfoとして宣言したにもかかわらず、MediaInfoとして扱われるため、コードでエラーが発生します。
それで、私の問題をより一般的な質問に要約すると、派生クラスで、基本クラスの保護された基本変数からどのように派生するのですか?
これが少し紛らわしい場合は申し訳ありませんが、不明確な詳細があれば喜んで明確にします。