Ошибка компилятора 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);
    }
}

См. также