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

c# .net

38364 просмотра

7 ответа

4609 Репутация автора

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

Почему нет?

Автор: user18931 Источник Размещён: 25.09.2008 04:08

Ответы (7)


65 плюса

21682 Репутация автора

Решение

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

Автор: Kilhoffer Размещён: 25.09.2008 04:08

6 плюса

99 Репутация автора

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

Автор: user10059 Размещён: 25.09.2008 04:10

1 плюс

5355 Репутация автора

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

Автор: CSharpAtl Размещён: 25.09.2008 04:40

8 плюса

11376 Репутация автора

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

public static void StaticMethod(Object o)
{
     MyClass.StaticProperty = o;
}
Автор: Timothy Carter Размещён: 25.09.2008 05:07

0 плюса

0 Репутация автора

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

Автор: Bill Lyons Размещён: 25.09.2008 07:06

1 плюс

11 Репутация автора

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

    Class ClsProgram(){
public static void staticfunc(){
ClsProgram Obj = new ClsPrograM()
Obj.NonStaticFunc();
}
public void NonStaticFunc(){}
}
Автор: Rohit Shirgaonkar Размещён: 03.12.2014 08:57

0 плюса

1099 Репутация автора

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

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

Application.OpenForms["MainForm"];
Автор: Barry Guvenkaya Размещён: 28.10.2016 01:02
32x32