我正在编写一个基本的媒体播放器,我在编写多态代码时遇到了一些麻烦,这是我研究过的,但以前从未真正实现过。
有四个相关的类:MediaInfo、MovieInfo、Media 和 Movie。
MediaInfo 是一个抽象基类,包含与所有媒体文件相关的信息。MovieInfo 继承自 MediaInfo 并添加一些特定于视频文件的信息。
媒体是代表所有媒体文件的抽象基类。电影继承自媒体。
现在,Media 包含以下代码行:
protected MediaInfo info;
在 Media 内部,我有从 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,因此代码会生成错误。
因此,将我的问题总结为一个更通用的问题:在派生类中,如何从基类中的受保护基变量派生?
抱歉,如果这有点令人困惑,我很乐意澄清任何不清楚的细节。