2017-04-03 83 views
0

我是一個新的C#程序員,我在想爲什麼我要得到一個object does not contain a definition of ' methodName ' and no extension method ' methodName ' accepting a first argument of type 'object' could be found錯誤。我不確定爲什麼看起來這兩個班級沒有聯繫。其他類中不識別類的類

這裏是我的方法定義的類:調用方法

namespace Simple_Restaurant_Simulation 
{ 
    class ChickenOrder 
    { 
     public int quantity; 
     public int GetQuantity(int ChickenQuantity) 
     { 
      this.quantity = ChickenQuantity; 
      return quantity; 
     } 

     public void CutUp() 
     { 
      return; 
     } 

     public void Cook() 
     { 
      return; 
     } 
    } 
} 

和:我不知道你正在嘗試做的

namespace Simple_Restaurant_Simulation 
{ 
    class Employees 
    { 
     public dynamic NewRequest(int Quantity, string MenuItem) 
     { 
      if (MenuItem == "Chicken") 
      { 
       return new ChickenOrder(); 
      } 

      else 
      { 
       return new EggOrder(); 
      } 
     } 

     public dynamic CopyRequest(dynamic MenuItem) 
     { 
      /*TODO: 
      if(existing order){ 
       return existing order; 
      }   

      else { return "Whaddaya think I am, a miracle worker?"}; 

      */ 
      return null; 
     } 

     public int Inspect(object Order) 
     { 
      int InspectResult = 0; 

      return InspectResult; 
     } 

     private string PrepareFood(object Order) 
     { 

      string PrepareResult = null; 

      try 
      { 
       if (Order is ChickenOrder) 
       { 
        for (int i=0; i < this.GetQuantity; i++) 
        { 
         Order.CutUp(); 
        } 
        Order.Cook(); 
        PrepareResult = "Chicken order has been cooked"; 
       } 
           return PrepareResult; 

      } 
      catch (Exception) 
      { 
      } 
     } 
    } 
} 

感謝您的幫助

+1

你的錯誤是哪一行? – maccettura

+6

提示:Order變量的編譯時類型是什麼?使用'is'運算符不會改變... –

+1

ChickenOrder是否從Order繼承? – mm8

回答

1

這裏但PrepareMethod不編譯的原因是它接受objectobject類型顯然沒有CutUp()方法。

您可以使用as運營商嘗試將Order對象轉換爲ChickenOrder

ChickenOrder chickenOrder = Order as ChickenOrder; 
if (chickenOrder != null) 
{ 
    for (int i = 0; i< this.GetQuantity; i++) 
    { 
     chickenOrder.CutUp(); 
    } 
    chickenOrder.Cook(); 
    PrepareResult = "Chicken order has been cooked"; 
} 

注,中投纔會成功,如果要傳遞的PrepareFood方法在運行時的對象實際上是一個ChickenOrder。你要能一ChickenOrder對象傳遞給接受一個Order參數的方法爲,將ChickenOrder類應該從Order繼承:

class ChickenOrder : Order 
{ 
    ... 
} 

兩個EggOrderChickenOrder是應該從Order繼承特定類型的訂單基類。這也意味着您可以將NewRequest方法的返回類型從dynamic更改爲Order,並將您傳遞給其他方法的參數的類型從object更改爲Order