3

基本的に私は次のことができるようにしたいのですが、クラス階層を間違って設計したか、ポリモーフィズム/ジェネリックコレクションに関連する重要なものが欠けていると思います:

ISearchableMediaList<IMedia> list = new MovieList();

上記の行は次のエラーを生成します: Cannot implicitly convert type 'MovieList' to 'ISearchableMediaList<IMedia>'. An explicit conversion exists (are you missing a cast?). キャストせずにインターフェイスの派生型を置き換えることはできませんか? (詳細については、下部のクラス図を参照してください)。


public interface IMedia 
{
    string Title { get; set; }
    double Rating { get; set; }
    DateTime Date { get; set; }
    string Comments { get; set; }
}

public class Media : IMedia { ... }
public class Movie : Media { // Adds on movie-specific properties }
public class Book : Media { // Adds on book-specific properties }

public interface IMediaList<T> : ISearchableMediaList<T> where T : IMedia
{ ... }

public interface ISearchableMediaList<T> : IList<T> where T : IMedia
{
    IList<string> SearchCategories { get; }
    IList<T> Search(string query, string category);
}

public class MediaList<T> : BindingList<T>, IMediaList<T> where T : IMedia
{ 
    // Implements common search functionality and other stuff 
}
public class MovieList : MediaList<Movie> 
{ 
    // Implements movie-specific searching and other stuff
}
public class BookList : MediaList<Book> 
{ 
    // Implements book-specific searching and other stuff
}

ここに画像の説明を入力

4

1 に答える 1

1

ISearchableList<IMedia> は使用できません。次のように適切な実装型を使用する必要があります。

      ISearchableMediaList<Movie> list = new MovieList();
于 2013-07-07T02:52:49.593 に答える