基本上我希望能够做到以下几点,但我认为我设计的类层次结构错误,或者我遗漏了与多态/泛型集合相关的重要事项:
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
}
答案 0 :(得分:1)
您不能使用ISearchableList&lt; IMedia&gt;,您必须使用相应的实现类型,如下所示:
ISearchableMediaList<Movie> list = new MovieList();