繁体   English   中英

多态/子类型违规?

[英]Polymorphism/Subtype violation?

基本上我希望能够执行以下操作,但我认为我设计的类层次结构错误或者我遗漏了与多态/泛型集合相关的重要事项:

ISearchableMediaList<IMedia> list = new MovieList();

上面的行产生以下错误: Cannot implicitly convert type 'MovieList' to 'ISearchableMediaList<IMedia>'. An explicit conversion exists (are you missing a cast?) 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
}

在此输入图像描述

您不能使用ISearchableList <IMedia>,您必须使用适当的实现类型,如下所示:

      ISearchableMediaList<Movie> list = new MovieList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM