0

我有如下 ViewModel 类:

public class ReferenceDetailsViewModel
{
    public ReferenceDetailsViewModel() {
        this.Timer = new List<long>();
    }
    public IEnumerable<Reference.Grid> Grid { get; set; }
    public List<long> Timer { get; set; }
}

public class ContentDetailsViewModel
{
    public ContentDetailsViewModel() {
        this.Timer = new List<long>();
    }
    public IEnumerable<Content.Grid> Detail { get; set; }
    public SelectList Statuses { get; set; }
    public SelectList Types { get; set; }
    public List<long> Timer { get; set; }
}

它们都有一个共同的 Timer 字段,并且在构造函数中初始化。

有没有一种方法可以创建一个 baseViewModel 并让它们继承 Timer 字段,以避免为每个具有计时器的 ViewModel 编码相同的东西?

4

3 回答 3

2

是的,编写一个抽象类并让具体类继承自它。

public abstract class BaseDetailsViewModel
{
    protected BaseDetailsViewModel() {
        Timer = new List<long>();
    }
    public List<long> Timer { get; set; }
}
于 2012-09-12T14:22:39.957 回答
1

如果我理解正确,您可以执行以下操作:

public abstract class DetailViewModelBase
{
    protected DetailViewModelBase()
    {
        Timer = new List<long>();
    }

    public List<long> Timer { get; set; }
}

public class ReferenceDetailsViewModel : DetailViewModelBase
{
    public IEnumerable<Reference.Grid> Grid { get; set; }
}


public class ContentDetailViewModel : DetailViewModelBase
{
    public IEnumerable<Content.Grid> Detail { get; set; }
    public SelectList Statuses { get; set; }
    public SelectList Types { get; set; }

}

使用“DetailViewModelBase”作为包含“计时器”的 ViewModel 的基类。

问候, C#er

于 2012-09-12T14:27:16.693 回答
1

如果您可以IGrid从两者中提取一个通用接口Reference.Gridund Content.Grid,您可能会得到

public abstract class GridViewModel<TGrid> where T : IGrid {
    protected GridViewModel() {
        Timer = new List<long>();
    }

    public List<long> Timer { get; set; }
    public IEnumerable<TGrid> Details { get; set; }
}

public class ReferenceDetailsViewModel : GridViewModel<Reference.Grid> { 

}

public class ContentDetailsViewModel : GridViewModel<Content.Grid> {
    public SelectList Statuses { get; set; }
    public SelectList Types { get; set; }
    public List<long> Timer { get; set; }
}

我假设您可以忍受重命名ReferenceDetailsViewModel.GridReferenceDetailsViewModel.Details.

于 2012-09-12T14:27:25.773 回答