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

Call non-static function from static function

本文关键字:静态函数 函数调用 静态      更新时间:2023-09-26

我无法从静态函数中调用非静态函数(或者)我想从静态函数调用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)
{
}

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

因此,如果不首先实例化非静态成员,就不能在静态方法中引用非静态成员。这就是为什么会出现错误。希望这能有所帮助!

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

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

不幸的是,您不能在静态方法内部调用实例方法。在你的情况下,以下可能吗?

    [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);