Chyba kompilátoru CS0120

Odkaz na objekt je vyžadován pro nestatické pole, metodu nebo vlastnost 'member'

Chcete-li použít nestatické pole, metodu nebo vlastnost, musíte nejprve vytvořit instanci objektu. Další informace o statických metodách naleznete v tématu Statické třídy a členy statické třídy. Další informace o vytváření instancí tříd naleznete v tématu Konstruktory instance.

Příklad 1

Následující ukázka vygeneruje 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
    }
}

Chcete-li tuto chybu opravit, nejprve vytvořte instanci třídy:

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

Příklad 2

CS0120 se také vygeneruje, pokud existuje volání nestatické metody ze statické metody následujícím způsobem:

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

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

Chcete-li tuto chybu opravit, nejprve vytvořte instanci třídy:

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

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

Příklad 3

Podobně statická metoda nemůže volat metodu instance, pokud ji explicitně neudělíte instanci třídy následujícím způsobem:

// CS0120_3.cs
using System;

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

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

Pokud chcete tuto chybu opravit, můžete do definice metody přidat také statické klíčové slovo:

// CS0120_3.cs
using System;

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

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

Viz také