我收到此错误,我不知道为什么。
'非静态字段,方法或者需要对象引用 属性'
为什么我需要在这里有对象引用?我的代码如下:
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服务。如何改变它以使用对象?
由于
答案 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();