将基类转换为派生类

use*_*116 6 c# asp.net inheritance type-conversion

我想知道为什么这会适当地填充派生类:

BaseClass bc = MethodThatReturnsBaseClassObject();
DerivedClass dc = bc as DerivedClass;
Run Code Online (Sandbox Code Playgroud)

但是这会创建一个null派生类对象:

DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;
Run Code Online (Sandbox Code Playgroud)

may*_*lle 9

发生这种情况是因为BaseClass它不是DerivedClass(但是DerivedClass是其实例BaseClass)的实例,因此您不能将基类的实例强制转换为派生类的实例(嗯,您可以,但它将为您找到的null).

你可以通过在派生类中添加一个构造函数来实现你想要实现的目标,该派生类将基类作为参数:

public DerivedClass(BaseClass baseClass) {
    // Populate common properties, call other derived class constructor, or call base constructor
}
Run Code Online (Sandbox Code Playgroud)

然后:

 DerivedClass dc = new DerivedClass(MethodThatReturnsBaseClassObject());
Run Code Online (Sandbox Code Playgroud)