2013-02-18 77 views
0

我有一個派生自設備基類的Face類。在基類(Equpiment)中,有一種方法根據數據庫中的rowID填充和返回設備對象。C#向下鑄造問題

派生clasd(FaceClass),我稱之爲超級

public PPE_EquipmentClass GetEquipmentByRowID(Int32 rowID) 
    { 
     PPE_EquipmentClass Equipment = new PPE_EquipmentClass(); 
     returns Equipment; 
    } 

在派生類中:

public class PPE_Face : PPE_EquipmentClass 
    { 

    public PPE_Face GetFaceData(Int32 rowID) 
    { 
     if (rowID>0) 
     { 
      try 
      { 
       PPE_Face Face = null; 
       Face = new PPE_Face(); 
       PPE_EquipmentClass _ppeEquip = new PPE_EquipmentClass(); 
       _Face =(PPE_Face) _ppeEquip.GetEquipmentByRowID(rowID); 
           } 
      catch (Exception ex) 
      { 

       throw new Exception(ex.Message); 
      } 
      finally 
      { 

      } 
     } 
    } 


    } 

但我不斷收到

「無法轉換對象類型'PPEWebApp.Classes.PPE_EquipmentClass' 鍵入'PPEWebApp.Classes.PPE_Face'

我不確定爲什麼倒鑄不工作,即使Equipment是基類。

+0

哪條線給你錯誤? – ChrisF 2013-02-18 16:36:32

+1

這段代碼片段不完整嗎? _Face在哪裏宣佈? – 2013-02-18 16:36:44

+1

我看到這個錯誤...它看起來像你不沮喪 - 你是向上傾斜的......這是沒有道理的?例如'_Face =(PPE_Face)_ppeEquip.GetEquipmentByRowID(rowID);'你不能將一個派生類型較少的派生類型轉換爲一個更派生的類型。 – Charleh 2013-02-18 16:38:18

回答

1

實例化它作爲一個PPE_EquipmentClass而非PPE_Face類:

public PPE_EquipmentClass GetEquipmentByRowID(Int32 rowID) 
{ 
    PPE_EquipmentClass Equipment = new PPE_EquipmentClass(); 
    return Equipment; 
} 

如果你希望它是你必須初始化它作爲這樣一個PPE_Face。作爲父類的成員並不一定意味着你是子類的成員,在這種情況下,顯然不像它被實例化爲新的PPE_EquipmentClass()。你可以這樣寫:

public PPE_EquipmentClass GetEquipmentByRowID(Int32 rowID) 
{ 
    PPE_EquipmentClass Equipment = new PPE_Face(); 
    return Equipment; 
} 

但是現在還不清楚這是不是你真正想要的。

+0

我的寫作意圖是這樣的,因爲有幾種類型的設備,而不是爲每個設備寫一個getEquipment,他們都使用基類自己的類。然後將返回值轉換爲衍生設備的有效類型。 – Napstar 2013-02-18 17:17:27

+0

@Napstar那麼在這種情況下,您正在投射一些實例化爲設備的東西,這是非法的。你不能將某些東西作爲父類來實例化,而是希望始終能夠將其轉換爲子類,你只能做相反的事情。 – 2013-02-18 17:56:50