gpt4 book ai didi

c# - 如何定义通用的通用类型属性?

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:13 24 4
gpt4 key购买 nike

因此,我尝试将多态性应用于某些 View ,并将此 View 绑定(bind)到通用 View 模型。这是我的基本抽象类:

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>
{

}

但这有两个问题,首先我传递的是一个泛型类型,它实际上不是继承类型,其次,当我定义模型绑定(bind)我的 View 时,我仍然必须定义一个特定的类型来绑定(bind)它:

@model AnimalViewModel // doesn't work, asks to define <T>

如果我尝试制作 DogNameViewModel : INameViewModelCatNameViewModel : INameViewModel从通用接口(interface)继承并执行:

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

是否有任何其他方法可以使我的“名称”属性足够通用以将其放入我的抽象类中?

最佳答案

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

@model AnimalViewModel< CatViewModel > 

简单地使用无界类型离开抽象类。

或者做@ganesh 所说的(动态的),那应该有效

关于c# - 如何定义通用的通用类型属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com