컴파일러 오류 CS0106

'modifier' 한정자는 이 항목에 사용할 수 없습니다.

클래스 또는 인터페이스 멤버가 잘못된 액세스 한정자로 표시되었습니다. 다음 예제에서는 몇 가지 잘못된 한정자를 설명합니다.

  • static 한정자는 로컬 함수에서 허용되지 않습니다. 정적 로컬 함수 기능은 C# 8.0부터 지원됩니다. C# 8.0을 지원하지 않는 컴파일러는 이 기능을 사용하려고 하면 CS0106을 생성합니다. 그러나 C# 8.0을 지원하지만 C# 8.0 이전 언어 버전이 설정된 컴파일러는 C# 8.0 이상을 사용할 것을 제안하는 진단을 생성합니다.

  • public 키워드는 명시적 인터페이스 선언에서 허용되지 않습니다. 이 경우 명시적 인터페이스 선언에서 public 키워드를 제거하세요.

  • abstract 키워드는 명시적 인터페이스 선언에서 허용되지 않습니다. 명시적 인터페이스 구현은 재정의될 수 없기 때문입니다.

  • 로컬 함수에는 액세스 한정자가 허용되지 않습니다. 로컬 함수는 항상 private입니다.

  • readonly 키워드는 ref readonly 반환을 제외하고는 클래스 유형의 메서드에서 허용되지 않습니다(readonly 키워드는 ref 키워드 뒤에 와야 함).

Visual Studio의 이전 릴리스에서는 static 한정자가 클래스에서 허용되지 않았지만 Visual Studio 2005부터 static 클래스가 허용됩니다.

자세한 내용은 인터페이스를 참조하세요.

예시

다음 샘플에서는 CS0106을 생성합니다.

// CS0106.cs
namespace MyNamespace
{
   interface I
   {
      void M1();
      void M2();
   }

   public class MyClass : I
   {
      public readonly int Prop1 { get; set; }   // CS0106
      public int Prop2 { get; readonly set; }   // CS0106

      public void I.M1() {}   // CS0106
      abstract void I.M2() {}   // CS0106

      public void AccessModifierOnLocalFunction()
      {
         public void LocalFunction() {}   // CS0106
      }

      public readonly void ReadonlyMethod() {}   // CS0106
      // Move the `readonly` keyword after the `ref` keyword
      public readonly ref int ReadonlyBeforeRef(ref int reference)   // CS0106
      {
         return ref reference;
      }

      public static void Main() {}
   }

   public readonly class ReadonlyClass {}   // CS0106
}