将基类转换为派生类

时间:2013-11-05 23:07:22

标签: c# asp.net inheritance type-conversion

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

BaseClass bc = MethodThatReturnsBaseClassObject();
DerivedClass dc = bc as DerivedClass;

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

DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;

2 个答案:

答案 0 :(得分:8)

这是因为BaseClass不是DerivedClass的实例(但DerivedClassBaseClass的实例),因此您无法将基类的实例强制转换为派生类的一个实例(嗯,你可以,但是你发现它将是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)。