[英]How do I define a generic, generic typed property?
因此,我试图将多态性应用于某些视图,并将该视图绑定到通用视图模型。 这是我的基本抽象类:
public abstract class AnimalViewModel
{
public abstract IPagedList<object> Names { get; set; }
}
我有两个继承自它的类:
public class CatViewModel : AnimalViewModel
{
public override IPagedList<CatNameViewModel> Names { get; set; }
}
public class DogViewModel : AnimalViewModel
{
public override IPagedList<DogNameViewModel> Names { get; set; }
}
请注意,尽管有我的示例,但CatNameViewModel
和DogNameViewModel
绝对没有共同点。
显然,这并不工作,因为财产签名IPagedList<object>
不匹配的说IPagedList<DogNameViewModel>
我知道解决此问题的正常方法是这样做:
public abstract class AnimalViewModel<T>
{
public IPagedList<T> Names { get; set; }
}
public class CatViewModel : AnimalViewModel<CatNameViewModel>
{
}
public class DogViewModel : AnimalViewModel<DogNameViewModel>
{
}
但这有两个问题,首先,我要传递一个实际上不是继承类型的通用类型,其次,当我定义将视图绑定到的模型时,我仍然必须定义一个特定的类型来将其绑定到:
@model AnimalViewModel // doesn't work, asks to define <T>
并且,如果我尝试使DogNameViewModel : INameViewModel
和CatNameViewModel : INameViewModel
从通用接口继承并执行:
@model AnimalViewModel<INameViewModel> // doesn't work either
还有什么其他方法可以使我的“名称”属性具有足够的通用性,可以将其放入抽象类中?
声明模型时,需要指定具体类型,例如
@model AnimalViewModel< CatViewModel >
只需使用无界类型保留抽象类。
或者做@ganesh状态(动态),那应该工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.