2017-04-03 73 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