2016-12-14 5 views
1

Обычно мы не можем вызывать нестатический метод внутри статического метода. Но если мы используем экземпляр класса, мы можем сделать это. Как экземпляр класса дает нам возможность?Почему вызов нестатического метода внутри статического метода в C# возможен через экземпляр класса

ответ

7

Обычно мы не можем вызвать нестатический метод внутри статического метода.

Это грубое упрощение: мы не можем вызывать нестатические методы в нашем собственном классе, предоставляя одно имя метода, потому что не существует «этого» объекта по умолчанию. Когда вы пишете

SomeMethod(arg1, arg2); 

внутри метода экземпляра C# интерпретирует это как

this.SomeMethod(arg1, arg2); 

Тот же трюк не работает в статическом методе, так как статические методы не имеют доступа к «это».

Но если мы используем экземпляр класса, мы можем сделать это.

Это потому, что как только вы предоставите другой объект, нет необходимости искать «этот» объект.

8

Вопрос просто: какой экземпляр вы пытаетесь вызвать метод? Какой набор локальных полей следует принять?

В случае метода экземпляра это просто: когда вы вызываете SomeInstanceMethod(), компилятор добавляет неявный this., поэтому ответ на эти вопросы является «текущим» (который, с технической точки зрения, значение arg0). Поэтому, когда вы вводите SomeInstanceMethod(), компилятор предполагает, что вы имеете в виду this.SomeInstanceMethod().

В случае статического метода нет неявного this, который может быть добавлен. Вы все равно можете вызвать методы экземпляра, но вам нужно явно указать целевой экземпляр. someObj.SomeInstanceMethod() будет работать нормально. Обратите внимание, что вы также можете использовать someObj.SomeInstanceMethod() из метода экземпляра для вызова метода в контексте другого экземпляра.

Смежные вопросы