2016-03-01 2 views
0

Я получаю эту ошибку, и я не знаю почему.Ошибка при вызове метода, который возвращает строку 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(); 

Почему ссылку на объект, необходимый в этом случае? Я не могу использовать static, потому что создаю веб-службу, которая не работает со статическими методами. Как это изменить для использования объектов?

Благодаря

+1

Где именно вы вызываете 'getChanges()' from? – Rhumborl

+1

Ваш метод GetChanges - это метод экземпляра _ по умолчанию. Вы не можете называть это без имени типа, которое принадлежит. Сделайте это 'static' или вызовите его с помощью своего типа, например' string changelog = MyType.GetChanges(); ' –

+0

Где вы называете этот метод GetChanges? Мне кажется, вы должны отделить логику метода от интерфейса веб-службы и вызвать логику вместо службы из своего кода. Вызов метода веб-службы напрямую пахнет - вы в основном пытаетесь вымыть интерфейс. – Luaan

ответ

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 
    } 
} 
2

Ваш звонок нормально только внутри вашей класс. Вне этого нет.

Вы должны определить его как:

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

и называют его

MyClass.GetChanges(); 

или создать экземпляр класса, содержащего метод GetChanges.

Пример:

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

затем

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

Вы не можете вызывать метод нон static из метода static.

Вам необходимо создать экземпляр объекта оттуда, где объявляется GetChanges().

Foo f = new Foo(); 
f.GetChanges(); 
Смежные вопросы