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#精英投票否决,要么被嘲笑。感谢您为解释付出的努力,非常感谢。不客气。我也认为这样会是一个更好的地方,少一些精英主义。我们曾经都是初学者。