Я пытаюсь использовать ключевое слово this
в статическом методе, но компилятор не разрешит мне его использовать.
Почему бы и нет?
Я пытаюсь использовать ключевое слово this
в статическом методе, но компилятор не разрешит мне его использовать.
Почему бы и нет?
Это легкий. Ключевое слово 'this' возвращает ссылку на текущий экземпляр класса, содержащего его. Статические методы (или любой статический член) не относятся к определенному экземпляру. Они существуют без создания экземпляра класса. Существует гораздо больше подробное объяснение о том, какие статические члены и почему/когда использовать их в документах MSDN.
В качестве дополнительной заметки из статического метода вы можете получить доступ или статические члены этого класса. Приведем пример ниже действительного и порой весьма полезного.
public static void StaticMethod(Object o)
{
MyClass.StaticProperty = o;
}
Статические методы специфичны для класса, а не для конкретных экземпляров. "this" представляет экземпляр класса во время выполнения, поэтому его нельзя использовать в статическом контексте, поскольку он не будет ссылаться ни на какой экземпляр. Вместо этого следует использовать имя класса, и вы сможете получить доступ к статическим членам класса
это представляет текущий экземпляр объекта и нет экземпляра со статическими методами.
В статическом методе нет ссылки на объект this
.
Если вы хотите использовать нестационарную функцию класса в статической функции. Создайте объект класса в статической функции. Для Eg
Class ClsProgram(){
public static void staticfunc(){
ClsProgram Obj = new ClsPrograM()
Obj.NonStaticFunc();
}
public void NonStaticFunc(){}
}
В вопросе OP см. принятый ответ. Этот ответ предназначен для тех, кто ищет быстрый один лайнер для использования в статических методах.
Если класс является формой и он открывается (вам также нужно имя формы), это можно вызвать в статическом методе;
Application.OpenForms["MainForm"];
Черт, я хотел что-то вроде этого:
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);
}
}