Erro do Compilador CS0120

Uma referência de objeto é necessária para o campo, método ou propriedade não estática "membro"

Para usar um campo, método ou propriedade não estáticos você deve primeiro criar uma instância de objeto. Para obter mais informações sobre métodos estáticos, consulte Classes estáticas e membros de classes estáticas. Para obter mais informações sobre a criação de instâncias de classes, consulte Construtores de instância.

Exemplo 1

O exemplo a seguir gera o erro 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
    }
}

Para corrigir esse erro, primeiro crie uma instância da classe:

// 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;
    }
}

Exemplo 2

O erro CS0120 também será gerado se houver uma chamada de um método estático a um método não estático, da seguinte maneira:

// CS0120_2.cs
public class MyClass
{
    public void Method() { }

    public static void Main()
    {
        Method();   // CS0120
    }
}

Para corrigir esse erro, primeiro crie uma instância da classe:

// CS0120_2.cs
public class MyClass
{
    public void Method() { }

    public static void Main()
    {
        var mc = new MyClass();
        mc.Method();
    }
}

Exemplo 3

Da mesma forma, um método estático não pode chamar um método de instância, a menos que você atribua explicitamente uma instância da classe a ele, da seguinte maneira:

// CS0120_3.cs
using System;

public class MyClass
{
    public static void Main()
    {
        DoIt("Hello There");   // CS0120
    }

    private void DoIt(string sText)
    {
        Console.WriteLine(sText);
    }
}

Para corrigir esse erro, você também pode adicionar a palavra-chave estática à definição do método:

// CS0120_3.cs
using System;

public class MyClass
{
    public static void Main()
    {
        DoIt("Hello There");
    }

    private static void DoIt(string sText)
    {
        Console.WriteLine(sText);
    }
}

Confira também