Sam*_*ngo 4 c# base-class 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();
Run Code Online (Sandbox Code Playgroud)
代码编译没有任何错误,但是,我希望_baseClass只包含属性A(类型的对象BaseClass),但它同时返回A和B属性(类型的对象DerivedClass).我错过了什么以及将派生类的List转换为其基类列表的正确方法是什么?
谢谢.
Ree*_*sey 12
我错过了什么以及将派生类的List转换为其基类列表的正确方法是什么?
该列表仍然包含该实例DerivedClass,但它们被用作对它的引用BaseClass.
但是,此API的任何消费者都不会知道这一点,因此他们会将此视为BaseClass元素.
这很常见,通常是正确的方法.如果您需要将实例实际转换为BaseClass实例(这可能不是必需的),您需要实际BaseClass从DerivedClass成员创建新实例,即:
List<BaseClass> _baseClass = _derivedClass.Select(dc => new BaseClass {A = dc.A}).ToList();
Run Code Online (Sandbox Code Playgroud)
这通常没有必要,你目前的方法可能很好.在里氏替换原则规定,任何DerivedClass应在任何情况下为是可用的BaseClass,因为你做了应该罚款这意味着刚刚返回列表.