我可以调用另一个类中的公共void方法吗?

时间:2014-03-24 02:47:15

标签: c# asp.net

我想知道如何调用VOID方法;位于我的默认代码后面,来自Web用户控件?

该控件包含一个语句,需要使用我在后面的默认页面代码中声明的方法。我只是在后面的控件代码中声明该方法,但该方法将被多次使用,所以理想情况下,我想将它保留在后面的默认代码中,或者甚至将它放在一个类中。

问题在于我已经尝试将其保留在默认public partial class中,并且我试图创建一个单独的类,但我无法弄清楚如何调用它需要使用它。

Default.aspx.cs中的类:

// This method adds a string to the status output area
public void AddStatusMessage(string type, string message)
{
    if (message == string.Empty || type == string.Empty) { return; }

    if (type == "success")
    {
        successMessageList.Add("SUCCESS: " + message);
        Session["SuccessMessageList"] = successMessageList;
    }
    else if (type == "error")
    {
        errorMessageList.Add(message);
        Session["ErrorMessageList"] = errorMessageList;
    }
}

用户控件中需要使用该方法的语句:

// did the user enter a provider code but not check the confirmation box?
if (!ConfirmProviderCheckbox.Checked)
{
    failed = true;
    AddStatusMessage("error", "You must confirm the provider before proceeding.");
}

我认为在用户控件中调用这样的方法:

Namespace.Default.AddStatusMessage("error", "You must confirm the provider before proceeding.");

..但这似乎不起作用。

更新3/24: 好吧,我已经厌倦了在静态方法中创建该类的实例,以允许我从我的用户控件中调用它,但是我得到 Unknown方法' AddStatusMessage()'默认。它好像新实例无法在默认页面类中识别我的原始方法。

public static void PublicStatusMessage()
{
    Default Status = new Default().AddStatusMessage();
    Status.AddStatusMessage();
}

1 个答案:

答案 0 :(得分:1)

如果您的方法AddStatusMessage是静态的并且位于例如在名为A的名称空间中以及名为B的类中,调用它的正确方法是:A.B.AddStatusMessage("some text", "some text");

但是,为此,您需要将方法(AddStatusMessage)声明为static。如果该方法不是静态的,则需要创建B类的实例(使用A.B myB = new A.B();完成,然后在此实例myB.AddStatusMessage("some text", "some text");上调用该方法。

如果类与调用类位于同一名称空间中,则无需添加名称空间前缀。

正如在一些评论中已经解释的那样,static无论方法是否返回值都无关紧要。简单地说,关键字static意味着您可以通过在实现的类中访问来直接调用此方法,并且在此方法中您无权访问实例成员。

如果我理解正确你想要这样的东西:

public static void AddStatusMessage(string type, string message, System.Web.SessionState.HttpSessionState sessionState, List<string> successMessageList, List<string> errorMessageList)
{
    if (string.IsNullOrEmpty(message) || string.IsNullOrEmpty(type)) 
    {
        return; 
    }

    if (type == "success")
    {
        if (successMessageList != null)
        {
            successMessageList.Add("SUCCESS: " + message);
        }

        if (sessionState != null)
        {
            sessionState["SuccessMessageList"] = successMessageList;
        }
    }
    else if (type == "error")
    {
        if (errorMessageList != null)
        {
            errorMessageList.Add(message);
        }

        if (sessionState != null)
        {
            sessionState["ErrorMessageList"] = errorMessageList;
        }
    }
}

但是你应该考虑一些事情:如果类型既不是“成功”也不是“错误”会发生什么。在这种情况下,使用enum是明智的。通过这种方式,不可能获得“不需要的”值。下一点是:为什么有两个清单?为什么不能将成功和错误同时添加到一个列表中?名单不断......