[英]C# and inheritance. Base class property is null when the object is Extended class object
我有以下課程:
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的子類,但是當我運行代碼時它是null。 任何人都可以幫我解決這個問題嗎?
我這樣做的原因是我使用MVC3並且我傳遞給部分視圖對象/模型是類似結構的一部分,我通常只需要基類中的屬性。
提前致謝。
UPDATE
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;
它現在有效
您已經使用了new關鍵字,它隱藏了BaseContainer中的原始基本屬性。
實例化ExtendedContainer時,您要在子類上設置新屬性,而不是在基類上設置原始屬性。
只需從子類中刪除該屬性,一切都應該工作。
這里有兩個完全獨立的屬性,可以存儲不同的值。
您已在對象上設置ExtendedContainer.item
屬性,但尚未設置BaseContainer.item
屬性。
想象一下,這兩個屬性有完全不同的名稱 - 你不會指望設置一個改變另一個,那么,你呢? 就CLR而言,這兩個屬性具有名稱的事實僅僅是巧合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.