У меня есть статический метод [Method1] в моем классе, который называет другой метод [Method2] в том же классе и не является статическим методом. Но это нет - нет. Я получаю эту ошибку:
Ссылка на объект требуется для нестатического поля, метода или свойства "ClassName. MethodName ()"
Кто-то может кратко описать почему? включая другие вещи, которые могли бы быть связаны с этим.
Нестатический метод требует экземпляра класса. Если вы не передали экземпляр или не создали экземпляр в своем методе, вы не можете вызвать нестатический метод, так как вы не знаете, с каким экземпляром класса должен работать этот метод.
Внутри статического метода у вас нет экземпляра класса. Таким образом, будет невозможно вызвать метод экземпляра для экземпляра, если он не существует.
Для вызова нестатического метода нужен экземпляр класса. Вы можете создать экземпляр ClassName и вызвать Method2 следующим образом:
public class ClassName
{
public static void Method1()
{
ClassName c = new ClassName();
c.Method2();
}
public void Method2()
{
//dostuff
}
}
Ключевое слово static в основном отмечает метод как вызываемый, ссылаясь только на его тип [ClassName]. Все нестатические методы должны вызываться через экземпляр объекта.
Потому что "статический" метод - это то, что известно как "метод класса". То есть, в языке, основанном на классах, таком как C#, вы обращаетесь к объекту одним из двух способов: по классу или по экземпляру. Нестатические члены могут быть вызваны другими нестатическими членами, и наоборот, статические члены могут быть вызваны только другими статическими членами.
Имейте в виду, что вы можете перейти к одному из них из другого, используя механизм "new", или наоборот.
Для вызова не статического метода (т.е. метода экземпляра) вы должны иметь экземпляр объекта метода, прежде чем вы сможете вызвать указанный метод.
На самом деле вы пытаетесь сделать следующее. Обратите внимание на объект this
в Method1. У вас нет this
, доступного в статических методах.
static void Method1() {
this.Method2()
}
void Method2() { }
Статический метод по определению не имеет доступа к this
. Следовательно, он не может вызывать метод-член.
Если метод-член, который вы пытаетесь вызвать из статического метода, не нуждается в this
, вы можете изменить его на статический метод.