簡體   English   中英

將基類轉換為派生類

[英]Convert a base class to a derived class

我想知道為什么這會適當地填充派生類:

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

但是這會創建一個null派生類對象:

DerivedClass dc = MethodThatReturnsBaseClassObject() as DerivedClass;

發生這種情況是因為BaseClass不是DerivedClass的實例(但是DerivedClassBaseClass一個實例),所以你不能將基類的實例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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM