다음을 통해 공유


컴파일러 오류 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);
    }
}

참고 항목