Полиморфизм: производный от защищенного члена в базовом классе?

Я работаю над программированием базового медиаплеера, и у меня возникли проблемы с написанием полиморфного кода, который я изучал, но никогда раньше не реализовывал.

Существует четыре соответствующих класса: 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, поэтому код генерирует ошибку.

Итак, чтобы суммировать мою проблему в виде более общего вопроса: в производном классе, как мне получить производные от защищенной базовой переменной в базовом классе?

Извините, если получилось немного запутанно. Буду рад разъяснить любые неясные детали.

7
задан Omar 13 May 2012 в 20:21
поделиться