我想知道为什么这会适当地填充派生类:
BaseClass bc = MethodThatReturnsBaseClassObject();
DerivedClass dc = bc as DerivedClass;
但这会创建一个空派生类对象:
DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;
我想知道为什么这会适当地填充派生类:
BaseClass bc = MethodThatReturnsBaseClassObject();
DerivedClass dc = bc as DerivedClass;
但这会创建一个空派生类对象:
DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;
发生这种情况是因为BaseClass不是DerivedClass(而是DerivedClass)的实例BaseClass,因此您不能将基类的实例强制转换为派生类的实例(嗯,您可以,但正如您所发现的那样,它将为 null)。
您可以通过将构造函数添加到将基类作为参数的派生类中来完成(我认为)您想要实现的目标:
public DerivedClass(BaseClass baseClass) {
// Populate common properties, call other derived class constructor, or call base constructor
}
然后:
DerivedClass dc = new DerivedClass(MethodThatReturnsBaseClassObject());
如果不看会发生什么,就很难说清楚MethodThatReturnsBaseClassObject();。
除了在第一种情况下临时分配之外,您的语句(如果MethodThatReturnsBaseClassObject();总是返回对象)之间绝对没有区别。DerivedClassBaseClass
如果MethodThatReturnsBaseClassObject()返回 dc 的实例BaseClass将始终为空。BaseClass在这种情况下将持有参考。
如果MethodThatReturnsBaseClassObject()返回 dc 的实例DerivedClass将具有引用(并且不会为空)。