2013-02-20 2 views
2

정적 함수에서 비 정적 함수를 호출 할 수 없습니다. (또는) 정적 함수에서 javascript 함수를 호출하려고합니다.정적 함수에서 비 정적 함수 호출

[WebMethod] 
public static void add_items(string itemslist) 
{ 
    get_price(itemslist); // Error An object reference is required for non-static 

    //(or) 
    ScriptManager.RegisterStartupScript(this, 
     this.GetType(), 
     "script", 
     "<Script language='javascript' " 
      + "type='text/javascript'>message();</script>", 
     false); //Error in this, this 
} 

protected void get_price(string item_id) 
{ 

} 
+4

인스턴스 메서드를 호출하려면 인스턴스가 필요합니다. 어떻게 하나 만들어? – CodesInChaos

+2

이 코드가 진짜입니까? 정적 메서드에서는 'this'를 사용할 수 없습니다. – Maarten

답변

1

물론 허용 할 수 없습니다. 이 작업을 수행하려면 먼저 비 정적 메서드가 포함 된 개체를 인스턴스화해야합니다.

1

스트레이트 옵션은 클래스의 create 객체이며 메소드를 호출하는 것입니다. 객체 상태를 업데이트하지 않는 경우 (이 경우 나처럼 보임)

1

으로 변환하는 것보다 불행히도 정적 메서드 내에서 인스턴스 메서드를 호출 할 수 없습니다. 당신의 상황에 따라 가능한가요?

[WebMethod] 
    public static void add_items(string itemslist, Action<string> instanceMethod) 
    { 
     //get_price(itemslist);// Error An object reference is required for non-static 

     instanceMethod(itemlist); 
    } 

    protected void get_price(string item_id) 
    { 

    } 

그런 다음 인수로 get_price를 전달합니다.

add_items(anItemslist, get_price); 
2

정적 방법은 잠재적으로 아직 스택 또는 힙에 존재하지 않는 무언가를 참조하고 있음을 의미 할 수 정적 메서드에서 클래스 멤버에 접근, 그 클래스를 인스턴스화 여부에 관계없이 접근 할 수 있기 때문에 따라서 런타임에 예외가 발생합니다.

이러한 이유로 정적이 아닌 멤버를 먼저 인스턴스화하지 않고 정적 메서드 내부의 비 정적 멤버를 참조 할 수 없으므로 오류가 발생합니다. 희망이 도움이!

관련 문제