我有以下课程:
public class BaseContainer
{
public BaseItem item {get; set;}
}
public class ExtendedContainer : BaseContainer
{
new public ExtendedItem item {get; set;}
}
public class BaseItem{
public string Name { get; set; }
}
public class ExtendedItem : BaseItem
{
public string Surname { get; set; }
}
然后我有以下说明:
ExtendedItem ei = new ExtendedItem { Name = "MyName", Surname = "MySurname" };
ExtendedContainer ec = new ExtendedContainer { item = ei };
BaseContainer bc = ec;
string temp = bc.item.Name; // bc.item is null, why?
为什么 bc.item 为空?这不应该是因为 ExtendedItem 是 BaseItem 的子类,但是当我运行代码时它为空。谁能帮我解决这个问题?
我这样做的原因是我正在使用 MVC3 并且我正在传递给属于类似结构的部分视图对象/模型,并且我通常只需要基类中的属性。
提前致谢。
更新
乔恩是对的,我正在访问不同的对象。我所做的修复它是使用构造函数将项目属性设置为同一个对象。像这样:
public class BaseContainer
{
public BaseItem item {get; set;}
public BaseContainer(BaseItem item)
{
this.item = item;
}
}
public class ExtendedContainer : BaseContainer
{
public ExtendedItem item {get; set;}
public ExtendedContainer(ExtendedItem item) : base(item)
{
this.item = item;
}
}
public class BaseItem{
public string Name { get; set; }
}
public class ExtendedItem : BaseItem
{
public string Surname { get; set; }
}
然后我只创建对象:
ExtendedItem ei = new ExtendedItem { Name = "MyName", Surname = "MySurname" };
ExtendedContainer ec = new ExtendedContainer(ei);
BaseContainer bc = ec;
string temp = bc.item.Name;
现在可以了