我正在編程一個基本的媒體播放器,我在編寫多態代碼時遇到了一些麻煩,這是我研究過的,但從未實際執行過。多態性:從基類中的受保護成員派生?
有四個相關的類:MediaInfo,MovieInfo,Media和Movie。
MediaInfo是一個抽象基類,用於保存與所有媒體文件相關的信息。 MovieInfo繼承自MediaInfo並添加了一些特定於視頻文件的信息。
媒體是一個抽象基類,它表示所有媒體文件。 電影從Media繼承。現在
,媒體包含以下代碼行:
protected MediaInfo info;
內媒體,我有從的MediaInfo提取信息的訪問器。 但是,在Movie裏面,我想要有訪問器,它也從MovieInfo中提取信息。
因此,我所做裏面的電影是:
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被視爲MediaInfo,儘管我將其聲明爲MovieInfo,因此代碼會生成錯誤。
所以總結我的問題到一個更通用的問題:在派生類中,我如何從基類中的受保護的基類變量派生?
對不起,如果這有點令人困惑,我很樂意澄清任何不清楚的細節。
@丹尼爾 - 我認爲泛型是您所提供結構的唯一(類型安全)解決方案。如果您可以將'info'字段移出'MovieInfo'類並將其移入其子類,則可以以非通用方式進行操作。 – Lee