Я работаю над программированием базового медиаплеера, и у меня возникли проблемы с написанием полиморфного кода, который я изучал, но никогда раньше не реализовывал.
Существует четыре соответствующих класса: MediaInfo, MovieInfo, Media и Movie.
MediaInfo — это абстрактный базовый класс, который содержит информацию, относящуюся ко всем медиафайлам. MovieInfo наследуется от MediaInfo и добавляет некоторую информацию, относящуюся к видеофайлам.
Медиа — это абстрактный базовый класс, представляющий все медиафайлы.Фильм наследует от СМИ.
Теперь Media содержит следующую строку кода:
protected MediaInfo info;
Внутри Media у меня есть Accessors, которые извлекают информацию из 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 обрабатывается как MediaInfo, несмотря на то, что я объявил его как MovieInfo, поэтому код генерирует ошибку.
Итак, чтобы суммировать мою проблему в виде более общего вопроса: в производном классе, как мне получить производные от защищенной базовой переменной в базовом классе?
Извините, если получилось немного запутанно. Буду рад разъяснить любые неясные детали.