模型中的继承导致意外后果

时间:2015-03-09 10:06:33

标签: c#

这是我的模特:

public class ManageEngineSite
{
    public string accountName { get; set; }
    public string siteName { get; set; }
    public string description { get; set; }
}

public class ManageEngineUpdateSite : ManageEngineSite
{
    public string oldSiteName { get; set; }
}

当我基于ManageEngineUpdateSite模型实例化一个新对象时:

    ManageEngineUpdateSite sitetoUpdate = new ManageEngineUpdateSite();
    siteToUpdate.accountName = test1;
    siteToUpdate.description = "test description";
    siteToUpdate.siteName = "Site Name";
    siteToUpdate.oldSiteName = "Old Site Name";
    Operation responseModel = Test.UpdateSite(siteToUpdate);

如果我在最后一行代码处设置断点并检查对象,则它有一个如下的对象建模:

我相信这会破坏我的代码,因为传递的对象似乎缺少oldSiteName。

如何在模型上使用继承但仍能解决此问题?

1 个答案:

答案 0 :(得分:1)

实际上,你没有问题。如快照中所示,您的对象具有属性oldSiteName。调试器中显示的jsut略有不同,提醒您它是ManageEngineUpdateSite对象的属性,而不是继承属性。

现在,也许您的Test.UpdateSite方法接受ManageEngineSite作为其参数。要访问该物业,您必须进行演员表。

var siteToUpdateAsManageEngineUpdateSite = siteToUpdate as ManageEngineUpdateSite;
if (siteToUpdateAsManageEngineUpdateSite != null)
{
    var oldsiteName = siteToUpdateAsManageEngineUpdateSite.oldsiteName;
    // Do things
    ...
}

虽然这不是一个非常干净的方式,但也许你应该向Test.UpdateSite添加覆盖。

UpdateSite(ManageEngineUpdateSite siteToUpdate)
{
    // Do generic things
    UpdateSite((ManageEngineSite) siteToUpdate);

    var oldsiteName = siteToUpdate.oldsiteName;
    // Do specific things
    ...
}

很难说出你所做的事情的信息很少。