如何在窗口控制台应用程序中调用非静态方法

kom*_*mbo 1 c#

我构建了一个控制台应用程序,我正在尝试测试我的应用程序是否按预期工作。
我创建了API类的实例,如下面的代码,但我收到一个错误:
An object reference is required for the non-static field.我已经检查类似的问题,像这一个,但它似乎有所不同。我究竟做错了什么?

namespace ConsoleApplication1
{
    class Api
    {

        String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false";
        String bin_Num = "201284-11-000";
        Label lblResults;

        static void Main(string[] args)
        {
            Api Test_api = new Api();
            Test_api.getQualWeight(ConStr, bin_Num, lblResults);
        }

        public Dictionary<String, String> getQualWeight(String sqlConStr, String inBin, Label lblResults)
        {
            Dictionary<String, String> qualList = new Dictionary<string, string>();
            string selectSQL = "select Name,qual_weight from Qualification_type "
                             + "where ID in (select Qualification_ID from Qualifications where BIN = @inBin)";
            con = getConn(sqlConStr);
            SqlCommand cmd = new SqlCommand(selectSQL, con);
            cmd.Parameters.AddWithValue("@inBin", inBin);
            SqlDataReader reader;

            try
            {
                con.Open();
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    qualList.Add(reader[0].ToString(), reader[1].ToString());
                }
                reader.Close();
                return qualList;
            }
            catch (Exception err)
            {
                lblResults.Text = "error fetching qualification weight " + err.Message;
                return null;
            }
            finally
            {
                con.Close();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*zza 5

如果您想使用 anObject而不是所有成员都是静态的,您需要使用类的实例来引用非静态成员变量。

改变:

Test_api.getQualWeight(ConStr, bin_Num, lblResults);
Run Code Online (Sandbox Code Playgroud)

到:

Test_api.getQualWeight(Test_api.ConStr, Test_api.bin_Num, Test_api.lblResults);
Run Code Online (Sandbox Code Playgroud)

因为ConStr,bin_NumlblResults实例变量,所以它们必须引用类的实例——在这种情况下Test_api

或者,您可以通过从以下位置更改它们的声明,将这些值移动到全局、静态的范围中:

String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false";
String bin_Num = "201284-11-000";
Label lblResults;
Run Code Online (Sandbox Code Playgroud)

对此:

static String ConStr = "SERVER=myservername; Database=mydb; UID=mylogin; PWD=mypassword;encrypt=no;enlist=false";
static String bin_Num = "201284-11-000";
static Label lblResults;
Run Code Online (Sandbox Code Playgroud)