Подтвердить что ты не робот

Почему вы не можете использовать ключевое слово 'this' в статическом методе в .Net?

Я пытаюсь использовать ключевое слово this в статическом методе, но компилятор не разрешит мне его использовать.

Почему бы и нет?

4b9b3361

Ответ 1

Это легкий. Ключевое слово 'this' возвращает ссылку на текущий экземпляр класса, содержащего его. Статические методы (или любой статический член) не относятся к определенному экземпляру. Они существуют без создания экземпляра класса. Существует гораздо больше подробное объяснение о том, какие статические члены и почему/когда использовать их в документах MSDN.

Ответ 2

В качестве дополнительной заметки из статического метода вы можете получить доступ или статические члены этого класса. Приведем пример ниже действительного и порой весьма полезного.

public static void StaticMethod(Object o)
{
     MyClass.StaticProperty = o;
}

Ответ 3

Статические методы специфичны для класса, а не для конкретных экземпляров. "this" представляет экземпляр класса во время выполнения, поэтому его нельзя использовать в статическом контексте, поскольку он не будет ссылаться ни на какой экземпляр. Вместо этого следует использовать имя класса, и вы сможете получить доступ к статическим членам класса

Ответ 4

это представляет текущий экземпляр объекта и нет экземпляра со статическими методами.

Ответ 5

В статическом методе нет ссылки на объект this.

Ответ 6

Если вы хотите использовать нестационарную функцию класса в статической функции. Создайте объект класса в статической функции. Для Eg

    Class ClsProgram(){
public static void staticfunc(){
ClsProgram Obj = new ClsPrograM()
Obj.NonStaticFunc();
}
public void NonStaticFunc(){}
}

Ответ 7

В вопросе OP см. принятый ответ. Этот ответ предназначен для тех, кто ищет быстрый один лайнер для использования в статических методах.

Если класс является формой и он открывается (вам также нужно имя формы), это можно вызвать в статическом методе;

Application.OpenForms["MainForm"];

Ответ 8

Черт, я хотел что-то вроде этого:

    public class HTTPClientWithTokenAuthenticatingHandler : HttpClient
{
    public HTTPClientWithTokenAuthenticatingHandler(string clientId, string clientSecret, string clientScope, string clientAuthority)
        : this(GetMssageHandler(clientId, clientSecret, clientScope, clientAuthority))
    {

    }
    public HTTPClientWithTokenAuthenticatingHandler(BearerTokenAuthenticatingHandler messageHandler) :base(messageHandler)
    {
    }

    private static BearerTokenAuthenticatingHandler GetMssageHandler(string clientId, string clientSecret, string clientScope, string clientAuthority)
    {

        var tokenGenerator = new TokenGenerator(clientId, clientSecret, clientScope, clientAuthority, this);
        return new BearerTokenAuthenticatingHandler(tokenGenerator);
    }
}