中将基类转换为子类

中将基类转换为子类

我对OOP和C#真的很陌生,我想了解如何将代码尽可能地写为DRY。在我的ASP.NET MVC 3应用程序中,我在一个控制器中有多个操作(此示例代码中为两个),所有操作均返回不同的ViewModel,它们均继承相同的BaseViewModel。这是因为我在每个操作上都需要相同的数据,但是每个操作都需要其他属性。

我知道我可以简单地为ActionOneViewModel创建一个接收ViewModel对象的构造函数。但这是这样做的常用方法吗?还是有其他选择?

查看模型:

class BaseViewModel
{
    public string Name { get; set; }
    public List<User> Users { get; set; }
}

class ActionOneViewModel : BaseViewModel
{
    public bool FooBar { get; set; }
}

class ActionTwoViewModel : BaseViewModel
{
    public string PingPong { get; set; }
}


控制器动作:

public ActionResult ActionOne ()
{
    // this doesn't work (of course)
    ActionOneViewModel model = (ActionOneViewModel)createViewModel();
    model.FooBar = true;

    return View(model);
}

public ActionResult ActionTwo ()
{
    // this doesn't work (of course)
    ActionTwoViewModel model = (ActionTwoViewModel)createViewModel();
    model.PingPong = "blub";

    return View(model);
}

private BaseViewModel createViewModel()
{
    BaseViewModel model = new BaseViewModel();

    //
    // doing a lot of stuff here
    //

    return model;
}

最佳答案

怎么样:

ActionTwoViewModel model = new ActionTwoViewModel();
model = createViewModel(model);


private BaseViewModel createViewModel(BaseViewModel model)
{
    //
    // doing a lot of stuff here
    //

    return model;
}

关于c# - 在C#中将基类转换为子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11102402/

10-10 17:29