2014-03-26 177 views
0

我運行以下代碼:角色對象基類派生的類

我總是接收

System.InvalidCastException(無法轉換類型「CfgObject」的目的是鍵入'CfgService')

什麼是正確的做法?

+0

爲什麼你會期望這個工作? 'obj1'不是'CfgService'。 –

回答

1

不能從CfgObject轉換爲CfgService,僅從CfgServiceCfgObject。 鑄造總是從派生到基類完成。

+0

這不是真的(該投射總是從派生到基類完成)。嘗試做'對象o = 5;例如,int i =(int)o;'。查看「upcasting」vs「downcasting」 –

+0

當然,但你錯過了一件事:object o =(object)5; int i =(int)o; o已經是一個int了,所以這個投射什麼都不做。 –

0

如果您確實需要CfgService的實例,則需要創建CfgService的實例。如果您創建超類型(基礎),則不能將其轉換爲子類型。您可以執行以下操作,但這樣做會毫無意義,因爲您可能只需將obj1聲明爲CfgService即可。

CfgObject obj1 = new CfgService((object)1); 
CfgService service = (CfgService)obj1; 
service.GetObject();