Ошибка компилятора CS0120
Ссылка на объект требуется для нестаттического поля, метода или свойства "member"
Чтобы использовать нестатическое поле, метод или свойство, сначала необходимо создать экземпляр объекта. Дополнительные сведения о статических методах см. в статье Статические классы и члены статических классов. Дополнительные сведения о создании экземпляров классов см. в разделе Конструкторы экземпляров.
Пример 1
В следующем примере возникает ошибка CS0120:
// CS0120_1.cs
public class MyClass
{
// Non-static field.
public int i;
// Non-static method.
public void Method() { }
// Non-static property.
public int Prop
{
get
{
return 1;
}
}
public static void Main()
{
i = 10; // CS0120
Method(); // CS0120
int p = Prop; // CS0120
}
}
Чтобы исправить эту ошибку, сначала создайте экземпляр класса:
// CS0120_1.cs
public class MyClass
{
// Non-static field.
public int i;
// Non-static method.
public void Method() { }
// Non-static property.
public int Prop
{
get
{
return 1;
}
}
public static void Main()
{
var mc = new MyClass();
mc.i = 10;
mc.Method();
int p = mc.Prop;
}
}
Пример 2
Кроме того, ошибка CS0120 будет возникать при вызове нестатического метода из статического, как показано ниже:
// CS0120_2.cs
public class MyClass
{
public void Method() { }
public static void Main()
{
Method(); // CS0120
}
}
Чтобы исправить эту ошибку, сначала создайте экземпляр класса:
// CS0120_2.cs
public class MyClass
{
public void Method() { }
public static void Main()
{
var mc = new MyClass();
mc.Method();
}
}
Пример 3
Аналогичным образом, статический метод не может вызывать метод экземпляра, если ему не предоставлен явно экземпляр класса, как показано ниже:
// CS0120_3.cs
using System;
public class MyClass
{
public static void Main()
{
DoIt("Hello There"); // CS0120
}
private void DoIt(string sText)
{
Console.WriteLine(sText);
}
}
Чтобы исправить эту ошибку, можно также добавить ключевое слово static в определение метода:
// CS0120_3.cs
using System;
public class MyClass
{
public static void Main()
{
DoIt("Hello There");
}
private static void DoIt(string sText)
{
Console.WriteLine(sText);
}
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по