我想知道为什么这会适当地填充派生类:
BaseClass bc = MethodThatReturnsBaseClassObject();
DerivedClass dc = bc as DerivedClass;
但是这会创建一个null派生类对象:
DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;
答案 0 :(得分:8)
这是因为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());
答案 1 :(得分:1)
如果没有看到MethodThatReturnsBaseClassObject();
的内容,很难说清楚。
除了在第一种情况下临时分配给MethodThatReturnsBaseClassObject();
之外,您的陈述(如果DerivedClass
总是返回BaseClass
个对象)之间绝对没有区别。
如果MethodThatReturnsBaseClassObject()
返回BaseClass
dc的实例,则始终为null。 BaseClass
将在这种情况下提供参考。
如果MethodThatReturnsBaseClassObject()
返回DerivedClass
dc的实例,则会引用(并且不会为null)。