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 フィールドを持ち、これはコンストラクターで初期化されます。

timer を持つ各 ViewModel に対して同じことをコーディングしないように、 baseViewModel を作成して Timer フィールドを継承させる方法はありますか?

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; }

}

「Timer」を含むViewModelの基本クラスとして「DetailViewModelBase」を使用します。

よろしく、 C#er

于 2012-09-12T14:27:16.693 に答える
1

両方のundIGridから共通のインターフェイスを抽出できれば、次のようになる可能性がありますReference.GridContent.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.Gridして生活できると思いますReferenceDetailsViewModel.Details

于 2012-09-12T14:27:25.773 に答える