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

C# 导致意外后果的模型中的继承,c#,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 old

这是我的模型:

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


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

实际上,您没有问题。如快照所示,您的对象确实具有属性
oldSiteName
。它在调试器中显示在稍微不同的位置,以提醒您它是
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
    ...
}

很难用这么少的信息来说明您正在尝试做什么。

它并没有缺少旧的SiteName。您的对象仍然是ManageEngineUpdateSite类型您最好一步一步地检查代码,而不仅仅是放置断点。可能是“Test.UpdateSite”导致siteToUpdate对象发生更改的原因是
Test.UpdateSite
只需要一个
ManageEngineSite
?如果是这样,那么如果不强制转换到
ManageEngineUpdateSite
,将无法在该函数中访问
oldSiteName
。还不完全清楚你在问什么“我相信这破坏了我的代码”你相信是什么破坏了你的代码吗?“传递的对象似乎缺少oldSiteName。”你是什么意思?就在截图上。它是如何丢失的?请投否决票的人详细说明一下他为什么这样做?谢谢你解释这一点-我理解为什么现在会发生这种情况。我对C#比较陌生,但开始推迟在这里发布初学者问题,因为他们要么被C#精英投票否决,要么被嘲笑。感谢您为解释付出的努力,非常感谢。不客气。我也认为这样会是一个更好的地方,少一些精英主义。我们曾经都是初学者。