我想知道为什么这会适当地填充派生类:
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();
总是返回对象)之间绝对没有区别。DerivedClass
BaseClass
如果MethodThatReturnsBaseClassObject()
返回 dc 的实例BaseClass
将始终为空。BaseClass
在这种情况下将持有参考。
如果MethodThatReturnsBaseClassObject()
返回 dc 的实例DerivedClass
将具有引用(并且不会为空)。