从静态函数调用非静态函数

时间:2013-02-20 11:07:44

标签: c# javascript asp.net

我无法从静态函数调用非静态函数(或)我想从静态函数调用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 个答案:

答案 0 :(得分:2)

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

出于这个原因,您无法在不首先实例化非静态成员的情况下引用静态方法中的非静态成员,这就是您收到错误的原因。希望这有帮助!

答案 1 :(得分:1)

当然你不能。如果要执行此操作,则需要首先实例化包含非静态方法的对象。

答案 2 :(得分:1)

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

答案 3 :(得分: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);