2011-09-12 54 views
1
public abstract class ContentManagedEntity 
{ 
    public Guid Guid { get; set; } 

    public bool Active; 

    public int DisplayOrder; 
} 

public class StoreCategory : ContentManagedEntity 
{ 
    public string Name { get; set; } 
} 

public class XMLStoreCategory : StoreCategory, IXMLDataEntity 
{ 
    public bool Dirty = false; 
} 

void main() { 
    var storecategory = new StoreCategory { Name = "Discount Stores" }; 
    var xmlstorecategory = (XMLStoreCategory) storecategory; // Throws InvalidCastException 
} 

有它拋出在運行時就上線一個InvalidCastException理由嗎?從基類轉換爲繼承類時InvalidCastException?

(呸,我寫了這個,答案突然出現在我的頭上,一清二楚。發佈它爲後人,只是以確保我是正確的。)

回答

3

所有XMLStoreCategory對象StoreCategory小號,但並不是所有的StoreCategory都是XMLStoreCategorys。在這種情況下,您正在創建一個StoreCategory並試圖將其轉換爲不是的東西。

+0

是啊,理解了它,因爲我張貼的問題。現在感覺非常愚蠢。哦,至少如果其他人簽署了「st00pid」的臨時案例,他們可以參考這個。 :) –

4

你問這個:

class Animal { } 
class Cat : Animal { } 
class ShortHairedCat : Cat { } 

ShortHairedCat shortHairedCat = (ShortHairedCat)new Cat(); 

是一個Cat一個ShortHairedCat?不必要。在這種特殊情況下,new Cat()Cat這不是一個ShortHairedCut那麼當然你得到一個運行時異常。

記住,遺傳模型關係。它不一定是一個BaseDerived,所以在一般情況下,「向下轉換」是危險的情況。

+0

是的,我想到了,因爲我正在打字的東西。非常感謝。 :) –

2

您實例化對象StoreCategory。這與XMLStoreCategory不一樣,所以你不能這樣。

的情況下投會的工作是這樣的:

StoreCategory storecategory = new XMLStoreCategory { Name = "Discount Stores" }; 
var xmlstorecategory = (XMLStoreCategory) storecategory; 

,將工作,但你的具體情況是有點沒用。只是實例化XMLStoreCategory,你會很開心。