Compilerfout CS0120

Een objectverwijzing is vereist voor het niet-statische veld, de methode of de eigenschap Lid

Als u een niet-statisch veld, een methode of een eigenschap wilt gebruiken, moet u eerst een objectexemplaren maken. Zie Statische klassen en statische klasseleden voor meer informatie over statische methoden. Zie Exemplaarconstructors voor meer informatie over het maken van exemplaren van klassen.

Voorbeeld 1

In het volgende voorbeeld wordt CS0120 gegenereerd:

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

Als u deze fout wilt corrigeren, maakt u eerst een exemplaar van de klasse:

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

Voorbeeld 2

CS0120 wordt ook gegenereerd als er een aanroep naar een niet-statische methode van een statische methode is, als volgt:

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

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

Als u deze fout wilt corrigeren, maakt u eerst een exemplaar van de klasse:

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

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

Voorbeeld 3

Op dezelfde manier kan een statische methode geen instantiemethode aanroepen, tenzij u deze expliciet een exemplaar van de klasse geeft, als volgt:

// CS0120_3.cs
using System;

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

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

Als u deze fout wilt corrigeren, kunt u ook het trefwoord statisch toevoegen aan de methodedefinitie:

// CS0120_3.cs
using System;

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

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

Zie ook