[英]Convert a base class to a derived class
我想知道為什么這會適當地填充派生類:
BaseClass bc = MethodThatReturnsBaseClassObject();
DerivedClass dc = bc as DerivedClass;
但是這會創建一個null派生類對象:
DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;
發生這種情況是因為BaseClass
不是DerivedClass
的實例(但是DerivedClass
是BaseClass
一個實例),所以你不能將基類的實例DerivedClass
為派生類的實例(嗯,你可以,但它會為null,因為你找到)。
你可以通過在派生類中添加一個構造函數來實現你想要實現的目標,該派生類將基類作為參數:
public DerivedClass(BaseClass baseClass) {
// Populate common properties, call other derived class constructor, or call base constructor
}
然后:
DerivedClass dc = new DerivedClass(MethodThatReturnsBaseClassObject());
如果沒有看到MethodThatReturnsBaseClassObject();
很難分辨MethodThatReturnsBaseClassObject();
。
在第一種情況下,除了臨時賦值給BaseClass
之外,你的語句(如果MethodThatReturnsBaseClassObject();
總是返回DerivedClass
對象)之間絕對沒有區別。
如果MethodThatReturnsBaseClassObject()
返回BaseClass
實例,則dc將始終為null。 在這種情況下, BaseClass
將保留一個引用。
如果MethodThatReturnsBaseClassObject()
返回DerivedClass
實例,dc將具有引用(並且不會為null)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.