gpt4 book ai didi

C# 和继承。对象为扩展类对象时基类属性为null

转载 作者:太空狗 更新时间:2023-10-30 00:54:59 26 4
gpt4 key购买 nike

我有以下类(class):

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 并将属于类似结构的部分 View 对象/模型传递给部分 View ,我通常只需要基类中的属性。

提前致谢。

更新

Jon 是对的,我正在访问不同的对象。我所做的修复是使用构造函数将项目属性设置为同一对象。像这样:

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;

现在可以了

最佳答案

这里有两个完全独立的属性,它们可以存储不同的值。

您已在对象上设置了 ExtendedContainer.item 属性,但尚未设置 BaseContainer.item 属性。

想象一下这两个属性具有完全不同的名称 - 您不会期望设置一个来更改另一个,对吗?就 CLR 而言,这两个属性同名只是巧合。

关于C# 和继承。对象为扩展类对象时基类属性为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10899800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com