2017-04-03 1 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 오류가 발생했습니다. 왜 두 클래스가 연결되어 있지 않은지 나는 잘 모르겠습니다. 난 당신이 뭘 하려는지 확실하지 않다 당신의 도움이클래스가 다른 클래스의 메서드를 인식하지 못함

+1

오류는 무엇입니까? – maccettura

+6

힌트 :'Order' 변수의 컴파일 타임 타입은 무엇입니까? 'is' 연산자를 사용하면 그 값이 변경되지 않습니다 ... –

+1

ChickenOrder도 Order로부터 상속합니까? – mm8

답변

1

에 대한

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) 
      { 
      } 
     } 
    } 
} 

감사 :

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

및 호출 방법 : 여기

는 내 메소드 정의와 클래스 여기에 PrepareMethod이 컴파일되지 않는 이유는 object을 허용하고 object 유형에는 분명히가 없다는 것입니다방법. 당신은 런타임에 PrepareFood 방법을 전달하는 객체가 실제로 경우 캐스트가 성공할 것이라고

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

참고 :

당신은 ChickenOrderOrder 개체를 캐스팅하려고하는 as 연산자를 사용할 수 있습니다 ChickenOrder. 그리고 당신이 Order 인수를 받아들이는 방법에 ChickenOrder 개체를 전달할 수 있기를 들어, ChickenOrder 클래스는 Order에서 상속해야합니다

class ChickenOrder : Order 
{ 
    ... 
} 

모두 EggOrderChickenOrderOrder에서 상속해야 주문의 특정 유형은 기본 클래스. 또한 NewRequest 메서드의 반환 형식을 dynamic에서 Order으로 변경하고 다른 메서드로 전달할 매개 변수의 형식을 object에서 Order으로 변경할 수 있음을 의미합니다.

관련 문제