我不确定这是不是我没有使用正确语法或者我缺少某个概念。
所以基本的设计如下:
public abstract class ListItemModelBase
{
Guid id { get; set; }
}
public abstract class ListModelBase<T> where T : ListItemModelBase
{
List<T> Items { get; set; }
}
public class OrderListModel : ListModelBase<OrderListItemModel>
{
}
这一切都很顺利,但现在我想为我的MVC项目中使用的控制器添加一些继承关系。
因此,我想要做的是:
public interface IListController<T> where T : ListModelBase<ListItemModelBase>
{
T GetList(int Page, int ItemsPerPage);
}
那么,我可以这样做:
public class OrderListController : IListController<OrderListModel>, BaseController
{
public OrderListModel GetList(int Page, int ItemsPerPage)
{
}
}
但显然由于需要为 ListModelBase 应用泛型类型,这是不可能的。
这里的目标是使我能够使用 IListController 接口来表示我可以假定 controller.GetList(1, 10) 将向我返回一个 ListModelBase,然后我可以随后假定返回的模型将在列表部分的每个项目上都有一个 Id。
这是可能的吗?还是有更好的方法可以实现我想要做的事情吗?
更新:
为了明确,我知道我可以在控制器级别定义多个类型,但那不是我想要的。
所以我知道我可以这样做:
public interface IListController<T, TItemModel>
where T : ListModelBase<TListModel>
where TItemModel : ListItemModelBase
{
T GetList(int Page, int ItemsPerPage);
}
ListItemModelBase
的虚拟OrderListItemModel
时)。包括“我想要做的是…”下面的部分。我不太清楚你在问什么。 - TypeIAList<T>
不是协变的。没有办法获得具有Add
方法的协变、强类型集合。 - MarcinJuraszekList<T>
无法胜任的事实并不意味着你不能创建一个变体列表。 - Magus