繁体   English   中英

如何定义泛型,泛型类型的属性?

[英]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; }    
}

请注意,尽管有我的示例,但CatNameViewModelDogNameViewModel绝对没有共同点。

显然,这并不工作,因为财产签名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 : INameViewModelCatNameViewModel : INameViewModel从通用接口继承并执行:

@model AnimalViewModel<INameViewModel> // doesn't work either

还有什么其他方法可以使我的“名称”属性具有足够的通用性,可以将其放入抽象类中?

声明模型时,需要指定具体类型,例如

@model AnimalViewModel< CatViewModel > 

只需使用无界类型保留抽象类。

或者做@ganesh状态(动态),那应该工作

暂无
暂无

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

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