2013-02-20 112 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 2013-02-20 11:09:52

+2

这是真实的代码吗?您不能在静态方法中使用“this”。 – Maarten 2013-02-20 11:48:58

回答

1

当然,你不能。如果你想这样做,你需要首先实例化包含非静态方法的对象。

1

直接选项是创建类的对象,而不是调用方法。如果您没有更新对象状态(在本例中似乎是这样),则将get_price方法签名转换为static

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

由于静态方法可访问时,无论你是否实例化类,从静态方法访问类的成员可能意味着你引用的东西,还没有在在堆栈或堆存在,从而在运行时创建一个异常。

因此,您不能在静态方法内引用非静态成员,而无需首先实例化非静态成员,这就是为什么会出现错误。希望这可以帮助!