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

4 回答 4

3

由于无论您是否实例化该类,都可以访问静态方法,因此从静态方法访问类成员可能意味着您正在引用堆栈或堆中尚不存在的东西,从而在运行时创建异常.

出于这个原因,如果不先实例化非静态成员,就不能在静态方法中引用非静态成员,这就是您收到错误的原因。希望这可以帮助!

于 2013-02-20T11:30:06.200 回答
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);
于 2013-02-20T11:15:30.103 回答
1

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

于 2013-02-20T11:10:56.517 回答
1

直接选项是创建类的对象,然后调用方法。如果您没有更新对象状态(在这种情况下对我来说似乎),则将get_price方法签名转换为static

于 2013-02-20T11:11:30.007 回答