簡體   English   中英

將派生類的列表轉換為仍返回派生類對象的基類列表

[英]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對象),但它返回AB屬性( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM