2016-01-29 5 views
1

Я работаю над программой, похожей на Netflix, и включает фильмы.Преобразование объекта в унаследованный объект

У меня есть объект/класс фильма из API, который использует моя программа. Я сделал унаследованный класс этого объекта таким образом.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using TMDbLib.Objects.Movies; 
namespace Movie_Management.DATA 
{ 
    class MyMovie: TMDbLib.Objects.Movies.Movie 
    { 
     public string Path { get; set; } 
    } 
} 

Вот код, где я получаю объект Movie из API, который я использую.

 TMDbLib.Objects.Movies.Movie movie = new TMDbLib.Objects.Movies.Movie(); 
     movie = MovieProcesses.loadTMDbLib(justMovieName); 
     MyMovie myMovie = (MyMovie)movie; 
     myMovie.Path = path; 

     Cacher cache = new Cacher(); 
     cache.CacheVideo(myMovie); 

Я пытаюсь передать фильм TMDbLib в объект MyMovie. Но это не работает. Что я должен делать в этой ситуации?

{"Unable to cast object of type 'TMDbLib.Objects.Movies.Movie' to type 'Movie_Management.DATA.MyMovie'."} 

ответ

3

Вы не можете отличать «назад» в иерархиях наследования. Вы можете только перейти от фильма к MyMovie, а не наоборот.

Если вы хотите добавить дополнительный материал в существующий объект Movie, добавьте конструктор в MyMovie, который возьмет объект Movie в качестве параметра и скопирует переменные-члены вручную.

+0

Ну, вы можете бросить «назад», который называется понижающее приведение. Вот почему OP имеет ошибку времени выполнения - он может использовать, но кастинг ошибочен. – ixSci

+0

Что такое правильное литье? – Illuminati

+0

@Illuminati, вы можете использовать 'Movie' для' MyMovie', если ссылка типа 'Movie' указывает на объект' MyMovie' или его потомка (которого у вас нет). – ixSci

0
TMDbLib.Objects.Movies.Movie movie = new MyMovie(); 
    movie = MovieProcesses.loadTMDbLib(justMovieName); 
    MyMovie myMovie = movie as MyMovie; 
    myMovie.Path = path; 

    Cacher cache = new Cacher(); 
    cache.CacheVideo(myMovie); 

Надежда это код помощь

+0

Ссылка на объект не установлена ​​в экземпляр объекта. Для myMovie.Path = путь; – Illuminati

+0

, пожалуйста, помните 'TMDbLib.Objects.Movies.Movie movie = new MyMovie();' – Jaycee

+0

Я сделал то же самое, что и вы, и пошел ошибка, которую я опубликовал. – Illuminati