0

機器基本クラスから派生した Face クラスがあります。基本クラス (機器) には、データベース内の行 ID に基づいて機器オブジェクトを設定して返すメソッドがあります。

派生クラス (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 が基本クラスであるにもかかわらず、ダウン キャスティングが機能しない理由がよくわかりません。

4

1 に答える 1

1

PPE_Face クラスではなく、PPE_EquipmentClass としてインスタンス化します。

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; 
}

しかし、これがあなたが実際に望んでいるものかどうかは不明です。

于 2013-02-18T16:37:35.843 に答える