【发布时间】:2018-07-20 21:10:59
【问题描述】:
鉴于这些接口和类...
public interface IPage
{
string PageTitle { get; set; }
string PageContent { get; set; }
}
public abstract class Page
: IPage
{
public string PageTitle { get; set; }
public string PageContent { get; set; }
}
public class AboutPage
: Page
, IPage
{
}
public interface IPageAdminViewModel<out T>
where T : IPage
{
IEnumerable<T> Pages { get; }
}
public abstract class PageAdminViewModel<T>
: IPageAdminViewModel<T>
where T: IPage
{
public IEnumerable<T> Pages { get; set; }
}
为什么使用IPage作为接口类型参数不能编译......
public class AboutPageAdminViewModel
: PageAdminViewModel<AboutPage>
, IPageAdminViewModel<IPage> // ERROR HERE - I realise this declaration is not required, just indicating where the error is (not)
{
}
“AboutPageAdminViewModel”未实现接口成员“IPageAdminViewModel
.Pages”。 'PageAdminViewModel .Pages' 无法实现 'IPageAdminViewModel .Pages',因为它没有匹配的返回类型 'IEnumerable '。
....当使用具体类AboutPage 时呢?
public class AboutPageAdminViewModel
: PageAdminViewModel<AboutPage>
, IPageAdminViewModel<AboutPage> // NO ERROR - I realise this declaration is not required, just indicating where the error is (not)
{
}
本质上,我不明白为什么IEnumerable<IPage> 的返回类型与IEnumerable<AboutPage> 的返回类型不匹配。
我想创建一个将IPageAdminViewModel<IPage> 作为参数的方法。我想知道如何/是否可以使AboutPageAdminViewModel 符合该要求。
【问题讨论】:
-
谢谢,我什至不知道
<out T>是有效的语法! -
您是否有意在具体类中包含“基本接口”?它是通过扩展抽象类“隐式”实现的
-
我试图通过明确显示未编译的位置/内容来使问题更容易理解。你认为删除它会更清楚吗?
-
不一定,可以在问题本身添加此评论