Почему Вы не можете назвать нестатический метод от статического метода?

У меня есть статический метод [Method1] в моем классе, который называет другой метод [Method2] в том же классе и не является статическим методом. Но это нет - нет. Я получаю эту ошибку:

Ссылка на объект требуется для нестатического поля, метода или свойства "ClassName. MethodName ()"

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

5
задан Robert Harvey 6 May 2019 в 16:59
поделиться

6 ответов

Нестатический метод требует экземпляра класса. Если вы не передали экземпляр или не создали экземпляр в своем методе, вы не можете вызвать нестатический метод, так как вы не знаете, с каким экземпляром класса должен работать этот метод.

24
ответ дан 18 December 2019 в 05:54
поделиться

Внутри статического метода у вас нет экземпляра класса. Таким образом, будет невозможно вызвать метод экземпляра для экземпляра, если он не существует.

2
ответ дан 18 December 2019 в 05:54
поделиться

Для вызова нестатического метода нужен экземпляр класса. Вы можете создать экземпляр ClassName и вызвать Method2 следующим образом:

public class ClassName
{
    public static void Method1()
    {
        ClassName c = new ClassName();
        c.Method2();
    }

    public void Method2()
    {
        //dostuff
    }
}

Ключевое слово static в основном отмечает метод как вызываемый, ссылаясь только на его тип [ClassName]. Все нестатические методы должны вызываться через экземпляр объекта.

1
ответ дан 18 December 2019 в 05:54
поделиться

Потому что "статический" метод - это то, что известно как "метод класса". То есть, в языке, основанном на классах, таком как C#, вы обращаетесь к объекту одним из двух способов: по классу или по экземпляру. Нестатические члены могут быть вызваны другими нестатическими членами, и наоборот, статические члены могут быть вызваны только другими статическими членами.

Имейте в виду, что вы можете перейти к одному из них из другого, используя механизм "new", или наоборот.

0
ответ дан 18 December 2019 в 05:54
поделиться

Для вызова не статического метода (т.е. метода экземпляра) вы должны иметь экземпляр объекта метода, прежде чем вы сможете вызвать указанный метод.

На самом деле вы пытаетесь сделать следующее. Обратите внимание на объект this в Method1. У вас нет this, доступного в статических методах.

static void Method1() {
   this.Method2()
}

void Method2() { }
1
ответ дан 18 December 2019 в 05:54
поделиться

Статический метод по определению не имеет доступа к this. Следовательно, он не может вызывать метод-член.

Если метод-член, который вы пытаетесь вызвать из статического метода, не нуждается в this, вы можете изменить его на статический метод.

0
ответ дан 18 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: