调用返回字符串c#的方法时出错

时间:2016-03-01 09:58:12

标签: c#

我收到此错误,我不知道为什么。

  

'非静态字段,方法或者需要对象引用   属性'

为什么我需要在这里有对象引用?我的代码如下:

public string GetChanges()
    {
        string changelog = "";

        MySqlConnection connection = new MySqlConnection("server=127.0.0.1;uid=root;pwd=pass;database=data");
        try
        {
            connection.Open();

            MySqlCommand cmd = new MySqlCommand("SELECT `change_log` FROM version WHERE ID = '1'", connection);

            MySqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                if (!reader.IsDBNull(0))
                {
                    changelog = reader.GetString(0);
                }
            }

            connection.Close();
        }
        catch
        {
            //MessageBox.Show(e.Message, "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }

        return changelog;
    }

我这样调用上面的函数:

string changelog = GetChanges();

为什么在这种情况下需要对象引用?我不能使用静态因为我正在创建一个不使用静态方法的Web服务。如何改变它以使用对象?

由于

3 个答案:

答案 0 :(得分:2)

由于您的GetChanges不是static方法,因此如果没有具有该方法的object实例,则无法调用该方法:

public class MyClass {
    public string GetChanges(){
        ....
        return str;
    }
}

然后你可以这样称呼它:

MyClass insMyClass = new MyClass(); //note the instance of the object MyClass
string str = insMyClass.GetChanges();

或者,如果您将其声明为static,则必须使用班级名称来调用:

public static string GetChanges(){ //note the static here
    ....
    return str;
}

这样称呼:

string str = MyClass.GetChanges(); //note the MyClass is the class' name, not the instance of the class

只有在课程中调用GetChanges 时,才可以:

public class MyClass {
    public string GetChanges(){
        ....
        return str;
    }

    public void Foo(){
        string somestr = GetChanges(); //this is ok
    }
}

答案 1 :(得分:2)

你的电话只能在课堂上打电话。在它之外,不是。

您必须将其定义为:

public class MyClass{
    public static string GetChanges(){...}
 }

并将其命名为

MyClass.GetChanges();

或创建包含GetChanges方法的类的实例。

示例:

public class MyClass
    public string GetChanges(){....}

然后

var mc = new MyClass();
mc.GetChanges();

答案 2 :(得分:2)

您无法使用static方法调用非static方法。

您需要从声明GetChanges()的类中实例化一个对象。

Foo f = new Foo();
f.GetChanges();