C# 具有必需类和多个可选类的Viewmodel

C# 具有必需类和多个可选类的Viewmodel,c#,asp.net-mvc,oop,model-view-controller,viewmodel,C#,Asp.net Mvc,Oop,Model View Controller,Viewmodel,我正在创建的viewmodel存在一个必需的类,并且根据将加载的页面,实例化另一个类或者另一个viewmodel。这个viewmodel的实现是什么样子的 例子 基于上面的示例:razor引擎呈现的每个视图都需要类“Foo”的实现 第一页需要类“Bar1”。控制器中的代码如下所示:ViewModel.Bar1=newbar1() 第二个页面将需要“OtherViewmodel”类,并将在OtherViewmodel的控制器中创建一个实例 我不知道这是否是面向对象编程的正确方法。当viewmode

我正在创建的viewmodel存在一个必需的类,并且根据将加载的页面,实例化另一个类或者另一个viewmodel。这个viewmodel的实现是什么样子的

例子 基于上面的示例:razor引擎呈现的每个视图都需要类“Foo”的实现

第一页需要类“Bar1”。控制器中的代码如下所示:ViewModel.Bar1=newbar1()

第二个页面将需要“OtherViewmodel”类,并将在OtherViewmodel的控制器中创建一个实例

我不知道这是否是面向对象编程的正确方法。当viewmodel不需要某个对象并且它是类的属性(但未实例化)时,对象的大小如何

例如,“ViewModel”类将用于我的所有页面,因此我的所有类都将是此类中的属性。我认为有一种更干净的编程方法,但我还没有找到


任何帮助都将不胜感激。提前感谢。

使用基类怎么样

public abstract class BaseViewModel
{
    protected BaseViewModel()
    {
        foo = new Foo();
    }

    public Foo foo { get; set; }
}
您可以从仅包含一个条的类派生类:

public class Bar1ViewModel: BaseViewModel
{
    public Bar1 bar1 { get; set; }
}
对我来说,这似乎是一个更干净的方法。还可以在派生类的构造函数中实例化
Bar1
类,这样就不必在控制器中执行此操作:

public Bar1ViewModel()
{
    bar1 = new Bar1();
}
public Bar1ViewModel()
{
    bar1 = new Bar1();
}