[英]Casting List of derived class to List of base class still returning objects of derived class
我有以下代碼:
public class BaseClass
{
public string A { get; set; }
}
public class DerivedClass : BaseClass
{
public string B { get; set; }
}
List<DerivedClass> _derivedClass = new List<DerivedClass>()
{
new DerivedClass()
{ A = "test1",
B = "test2"
}
};
List<BaseClass> _baseClass = _derivedClass.Cast<BaseClass>.ToList();
代碼編譯沒有任何錯誤,但是,我希望_baseClass
只包含屬性A
(類型為BaseClass
對象),但它返回A
和B
屬性( DerivedClass
類型的DerivedClass
)。 我錯過了什么以及將派生類的List轉換為其基類列表的正確方法是什么?
謝謝。
我錯過了什么以及將派生類的List轉換為其基類列表的正確方法是什么?
該列表仍包含DerivedClass
實例,但它們被用作BaseClass
引用。
但是,此API的任何使用者都不會知道這一點,因此他們會將此視為BaseClass
元素。
這很常見,通常是正確的方法。 如果您需要實際將實例轉換為BaseClass
實例(這可能不是必需的),您需要實際從DerivedClass
成員創建新的BaseClass
實例,即:
List<BaseClass> _baseClass = _derivedClass.Select(dc => new BaseClass {A = dc.A}).ToList();
這通常沒有必要,你目前的方法可能很好。 Liskov替換原則指出任何DerivedClass
在任何情況下都可以作為BaseClass
,這意味着只需返回列表就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.